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

How to match all possible matches with RegExp?

本文关键字:有可能 何使用 RegExp      更新时间:2024-03-04

我想不出一种方法来获得所有可能的匹配。对于最基本的例子,我有这样的:

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

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

在这个例子中,可能的匹配是相同的,但它们不必是例如:

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

再次在这里,我希望["aba","bab"]

有办法做到这一点吗?

match(/.../g)找到的所有匹配项都是不重叠的:一旦找到匹配项,regexp引擎就会从匹配项的末尾开始继续。

如果你想使用这种机制,你不能使用完全匹配;但是您可以使用前瞻性和组,以及迭代。例如,这将起作用:

re = /bb/g;
var results = [];
while (matches = re.exec("bbb")) {
  results.push(matches);
  re.lastIndex -= matches[0].length - 1;
}

可以像这样使用positive lookahead来完成重叠匹配。

Regex:(?=(bb))

解释:

  • 它向前看bb并捕获它。Regex指针不在第二个b,它再次向前看并捕获bb,这次留下第一个。它一直持续到字符串结束

Regex101演示