RegExp.exec没有返回结果全球(RegExp.exec not returning glob

2019-09-27 04:14发布

据MDC https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp/exec下面的代码应记录每次全球比赛为这个正则表达式。

var str = "(^|\\+)(1\\+1)($|\\+)";
var regex = new RegExp(str, "g");
var result;
var testString = "1+1+1";
while ((result = regex.exec(testString)) != null)
{
    console.log(result);
}

但我得到的是第一场比赛,然后循环结束。 任何想法,为什么。

Answer 1:

这里只有一个匹配,因为重叠是不允许的。 本场比赛是:

(^|\\+) - ^

(1\\+1) - 1+1

($|\\+) - +

它应该清楚不可能有另一场比赛中,因为每场比赛至少需要1+1 ,而且也只有一个1倍左右。 作为一个单独的说明,使用正则表达式文字更简单:

var regex = /(^|\+)(1\+1)($|\+)/g;


Answer 2:

正则表达式不会匹配超过一次,因为比赛不能重叠该字符串更多。 你有你想匹配另一个样本串,或者从字符串中需要什么信息?

无论如何,我会用RegExp对象的文字代替; 少逃逸,您可以直接指定全局标志。

var regex = /(^|\+)(1\+1)($|\+)/g;


文章来源: RegExp.exec not returning global results