如何使用RegExp匹配所有可能的匹配?

时间:2016-04-07 05:14:49

标签: javascript regex

我无法找到一种方法来获得所有可能的匹配。对于最基本的例子,我有这个:

"bbb".match(/bb/g);
//returns ["bb"] 

但我希望它返回["bb","bb"],因为bb与前两个b匹配,然后再与最后2个b匹配

在此示例中,可能的匹配是相同的,但它们不必是例如:

"abab".match(/(.{1}).{1}\1/g);
//returns ["aba"]

我再次希望["aba","bab"]

有办法吗?

2 个答案:

答案 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;
}
相关问题