找到所有正则表达式匹配项

时间:2016-02-27 09:25:24

标签: javascript regex

每个人都告诉我,如果我有一个像/blah/g那样的正则表达式并且我在一个字符串上反复exec,那么我将完成所有的匹配,直到我结束。

但是如果我的正则表达式是/^$/g而我的字符串是""怎么办?那么什么?

这很好用:

var re = /bar/g,
    str = "foobarfoobar";
while ((match = re.exec(str)) != null) {
    alert("match found at " + match.index);
}

进入无限循环!

var re = /^$/g,
    str = "";
while ((match = re.exec(str)) != null) {
    alert("match found at " + match.index);
}

为什么,Javascript?为什么呢?

(更重要的是,如果我的正则表达式包含^$并且我的字符串可能是空字符串,我应该如何迭代正则表达式的匹配?)

1 个答案:

答案 0 :(得分:3)

这里的问题是由于JS正则表达式引擎在匹配空字符串时不会推进其索引。您可以手动移动它"使用一些额外的代码(取自regex101.com示例代码生成器页面):



var re = /^$/g; 
var str = '';
if ((m = re.exec(str)) !== null) {
    if (m.index === re.lastIndex) {  // Here you manually advance
        re.lastIndex++;              // the index
    }
    alert(m[0]);
}