2012-06-19 149 views
0

我不是一个正规表达专家,至少可以说。我正在寻找的是一个正则表达式,它从字符串中提取特定格式的多个值。正则表达式从字符串中提取多个格式化值

例字符串: “客户[记录:客户ID]从[记录:CityID]的类型为[记录:TYPEID]”

我需要的是,让我所有的值在此字符串是一个表达式格式为“[record:XXXXX]”。因此,在这个例子中它会给我:

[ “客户ID”, “CityID”, “TYPEID”]

能不能做到?

+0

是否使用了特定的语言?你可以用正则表达式来做你想做的事情,但这取决于你使用的结构和语言。 – npinti

+0

我正在寻找一个解决方案在JavaScript中。 –

回答

0

在Javascript中:

var pattern = '\\[record:([a-zA-Z0-9]+)\\]'; 
var records = new RegExp(pattern, 'g'); 
var extract = new RegExp(pattern); 

var string = "Customer [record:CustomerID] from [record:CityID] is of type [record:TypeID]" 

var matches = string.match(records); 
console.log(matches); 
> [ '[record:CustomerID]', 
    '[record:CityID]', 
    '[record:TypeID]' ] 

var records = []; 
for (var i=0; i<matches.length; i++) { 
    var match = matches[i].match(extract); 
    records.push(match[1]); 
} 
console.log(records) 
> [ 'CustomerID', 
    'CityID', 
    'TypeID' ] 

可能不是最简洁的解决方案,但干净,(希望)理解。

  • 方括号不应被特殊处理通过将\在他们面前被转义
  • 的组要提取被包裹在(),形成了一个正则表达式组/子模式
  • 图案[a-zA-Z0-9]+装置“匹配一串字母(大写或小写)或数字”,+指定“长度为一个或多个”。 A *这里的意思是“长度为0或更长”。

这里我使用了两个基于相同模式的正则表达式。它们使用不同的选项进行编译:g标志告诉正则表达式查找字符串中的所有匹配项。有了这个标志,我们就不会得到与结果匹配的组,只是匹配的整个字符串。第二个正则表达式编译时没有g标志,所以我们可以使用它来提取匹配的组。

+0

不确定我是否清楚:我给出的示例字符串是我想要使用的**精确**字符串。 –

+0

没错。在我的(已更新的)示例中使用正则表达式,并将它提取到数组中。 – chesles

+0

@chesles:就像参考文献一样,当回复评论时,如果您使用@ @用户名,您的回复将显示在用户名的通知中。这将使他们能够回应您的任何评论。 – npinti

0

其实,像sed可以做的伎俩,即:

echo "Customer ..." | sed -e 's/\][^[]*\[record:/","/'g -e 's/^.*record:/["/' -e 's/].*$/"]/ 
相关问题