每个人都告诉我,如果我有一个像/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?为什么呢?
(更重要的是,如果我的正则表达式包含^$
并且我的字符串可能是空字符串,我应该如何迭代正则表达式的匹配?)
答案 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]);
}