我想知道为什么这些正则表达式不相同:
/(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"
建议每个括号只保存一个字符 - 最后一个匹配。
答案 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很好地描述了它:
注意:您重复了捕获组本身。该小组将捕获 只有最后一次迭代