JS regexp:匹配重复模式

时间:2014-03-06 23:55:07

标签: javascript regex

我想知道为什么这些正则表达式不相同:

/(a)(a)(a)/.exec ("aaa").toString () => "aaa,a,a,a" , as expected
/(a){3}/.exec ("aaa").toString ()    => "aaa,a"      :(
/(a)*/.exec ("aaa").toString ()      => "aaa,a"      :(

最后两个怎么必须重新制定,以便它们像第一个一样?重要的是我希望任意倍数匹配并记住。

以下一行

/([abc])*/.exec ("abc").toString () => "abc,c"

建议每个括号只保存一个字符 - 最后一个匹配。

2 个答案:

答案 0 :(得分:3)

你可能正在寻找这个:

var re = /([abc])/g,
    matches = [],
    input = "abc";
while (match = re.exec(input)) matches.push(match[1]);

console.log(matches);
//=> ["a", "b", "c"] 

请记住,任何匹配的组都会为您提供最后匹配的模式,而不是全部匹配模式。

答案 1 :(得分:0)

RegExBuddy很好地描述了它:

  

注意:您重复了捕获组本身。该小组将捕获   只有最后一次迭代