Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 查找所有正则表达式匹配项_Javascript_Regex - Fatal编程技术网

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表单都会捕获或捕获愚蠢或恶意的输入。啊,好的。呃,我仍然觉得我看到的所有代码现在都被破坏了。计时器一到我就接受了。