我无法找到一种方法来获得所有可能的匹配。对于最基本的例子,我有这个:
"bbb".match(/bb/g);
//returns ["bb"]
但我希望它返回["bb","bb"]
,因为bb
与前两个b匹配,然后再与最后2个b匹配
在此示例中,可能的匹配是相同的,但它们不必是例如:
"abab".match(/(.{1}).{1}\1/g);
//returns ["aba"]
我再次希望["aba","bab"]
有办法吗?
答案 0 :(得分:1)
重叠匹配可以使用positive lookahead
这样完成。
正则表达式: (?=(bb))
说明:
bb
并抓住它。正则表达式指针不在第二个b
,它再次向前看并捕获bb
,这次是第一个。它一直持续到字符串结束。<强> Regex101 Demo 强>
答案 1 :(得分:1)
match(/.../g)
找到的所有匹配都不会重叠:找到匹配后,regexp引擎会从匹配结束后继续。
如果要使用此机制,则无法使用完全匹配;但您可以使用前瞻和组,以及迭代。例如,这将起作用:
re = /bb/g;
var results = [];
while (matches = re.exec("bbb")) {
results.push(matches);
re.lastIndex -= matches[0].length - 1;
}