我有这个字符串:
abcabca
和这个正则表达式:
/abca/g
这个只匹配第一个abca
,但我希望它与第二个匹配。
答案 0 :(得分:5)
答案 1 :(得分:1)
Anubhava's answer不完整,因为Lucas Trzesniewski mentions /(?=(abca))/g
正则表达式需要特定的JS代码才能使用。
如果您在regexr.com测试正则表达式,则会收到警告:
这是因为匹配是一个空字符串,abca
值是一个子匹配,一个捕获的文本。为了使正则表达式索引前进,您需要告诉JS继续沿着字符串继续:
var re = /(?=(abca))/g;
var str = 'abcabca';
var res = [];
while ((m = re.exec(str)) !== null) {
if (m.index === re.lastIndex) { // Here we tell the regex
re.lastIndex++; // engine to move
} // on
res.push(m[1]);
}
document.body.innerHTML = "<pre>" + JSON.stringify(res, 0, 4) + "</pre>";
结论:
re.findall
,preg_match_all
和Regex.Matches
将测试字符串中的每个位置(=提升正则表达式索引)他们自己。