如何构建正则表达式以捕获所有可能的匹配组

时间:2017-04-26 12:45:43

标签: regex

我有一个字符串,其中包含xml格式的数据,如

str = "<p><a>_a_10gd_</a><a>_a_xy8a_</a><a>_a_1020_</a><a>_a_dfa7_</a><a>_a_ABCD_</a></p>";

我想要做的是,我想从所有可能的马赫中捕获_abc__(Value)__。我这样试过了

假设我在JavaScript中这样做: -

var regex = /_a_(.+)_/g ;
var str = "<a>_a_10gd_</a><a>_a_xy8a_</a><a>_a_1020_</a><a>_a_dfa7_</a><a>_a_ABCD_</a>";

while(m = regex.exec(str)){
     console.log(m[1]); // m[1] should contains each mach 
}

我希望得到这样一个阵列中的所有机械组: -

var a = ['10gd', 'xy8a', '1020', 'dfa7', 'ABCD'];

请告诉我正则表达式需要什么,并解释它也因为我是regex及其捕获组的新手。

2 个答案:

答案 0 :(得分:1)

只需将(.+)更改为(.+?)即可:

var regex = /_a_(.+?)_/g ;
var str = "<a>_a_10gd_</a><a>_a_xy8a_</a><a>_a_1020_</a><a>_a_dfa7_</a><a>_a_ABCD_</a>";

while(m = regex.exec(str)){
     console.log(m[1]); // m[1] should contains each mach 
}

有关贪婪的更多信息,请参阅What do lazy and greedy mean in the context of regular expressions?

答案 1 :(得分:0)

另一种选择是只接受除_之前的_之外的字符(而不是你使用过的。),如下所示:

var regex = /_a_([^_]+)_/g ;