Javascript 查找所有正则表达式匹配项
每个人都告诉我,如果我有一个像Javascript 查找所有正则表达式匹配项,javascript,regex,Javascript,Regex,每个人都告诉我,如果我有一个像/blah/g这样的正则表达式,并且我在一个字符串上反复执行它,我将检查所有匹配项,直到结束 但是如果我的正则表达式是/^$/g,而字符串是”,那该怎么办呢?然后呢 这很好: var re = /bar/g, str = "foobarfoobar"; while ((match = re.exec(str)) != null) { alert("match found at " + match.index); } 这将进入一个无限循环 var r
/blah/g
这样的正则表达式,并且我在一个字符串上反复执行它,我将检查所有匹配项,直到结束
但是如果我的正则表达式是/^$/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?为什么?
(更重要的是,如果我的正则表达式包含
^$
,并且我的字符串可能是空字符串???,那么我到底应该如何迭代正则表达式的匹配?这里的问题是由JS正则表达式引擎在匹配空字符串时不提前索引这一事实造成的。您可以使用一些附加代码“手动”移动它(取自regex101.com示例代码生成器页面):
var re=/^$/g;
var-str='';
如果((m=re.exec(str))!==null){
如果(m.index==re.lastIndex){//在这里手动前进
re.lastIndex++;//索引
}
警报(m[0]);
}
没有/m
修饰符,/^$/g
正则表达式没有什么意义,因为/g
搜索多个匹配项,但是只能有一个。您是否需要支持任何用户生成的正则表达式,或者只支持对任何内容进行迭代都没有意义的特殊情况^$
。你可以使用match
@WiktorStribiżew它实际上是一个更大的正则表达式的一部分,例如/blah | foo | ^$/g
,我通常会多次使用它。你为什么要在一个空的空间中寻找空的空间呢。如果用户输入一个空字符串,在进行任何模式匹配之前,您应该捕获它,所有严肃的web表单都会捕获或捕获愚蠢或恶意的输入。啊,好的。呃,我仍然觉得我看到的所有代码现在都被破坏了。计时器一到我就接受了。