Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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
在Chrome和Firefox中每两次尝试匹配字符串一次的Javascript常规异常_Javascript_Regex_Firefox_Google Chrome - Fatal编程技术网

在Chrome和Firefox中每两次尝试匹配字符串一次的Javascript常规异常

在Chrome和Firefox中每两次尝试匹配字符串一次的Javascript常规异常,javascript,regex,firefox,google-chrome,Javascript,Regex,Firefox,Google Chrome,我有以下javascript正则表达式: var the_regexp = /^\/([!\/]*)\/?(\w*)\??([\=|\w]*)\/?$/gi 它使用Firefox和Chrome控制台,每隔两次尝试就查找一次字符串“/d”的匹配项 >the_regexp /^\/([!\/]*)\/?(\w*)\??([\=|\w]*)\/?$/gi >the_regexp.exec("/d") null >the_regexp.exec("/d") ["/d", "", "d

我有以下javascript正则表达式:

var the_regexp = /^\/([!\/]*)\/?(\w*)\??([\=|\w]*)\/?$/gi
它使用Firefox和Chrome控制台,每隔两次尝试就查找一次字符串“/d”的匹配项

>the_regexp
/^\/([!\/]*)\/?(\w*)\??([\=|\w]*)\/?$/gi
>the_regexp.exec("/d")
null
>the_regexp.exec("/d")
["/d", "", "d", ""]
>the_regexp.exec("/d")
null
>the_regexp.exec("/d")
["/d", "", "d", ""]
有人能解释一下这种行为吗

如果正则表达式使用“g”标志,则可以使用exec 方法多次查找同一字符串中的连续匹配项。 执行此操作时,搜索从指定的str子字符串开始 正则表达式的lastIndex属性

因此,当您的正则表达式有一个g标志,并且您只使用了一次exec方法时,下次执行它时,它将在第一次匹配后搜索匹配。在这种情况下,没有:exec将返回null,并且将重置lastIndex属性

例如:

var str = "abcdef";
//         ^ starting index for search is here
var regex = /ab/g;

regex.exec(str);
// str: "abcdef"
//         ^ starting index for search is now here

regex.exec(str);
// no match found from starting index, return null and reset
// str: "abcdef"
//       ^ starting index reset
对不起,我的话太糟糕了,我还没完全醒过来……

:

如果正则表达式使用“g”标志,则可以使用exec 方法多次查找同一字符串中的连续匹配项。 执行此操作时,搜索从指定的str子字符串开始 正则表达式的lastIndex属性

因此,当您的正则表达式有一个g标志,并且您只使用了一次exec方法时,下次执行它时,它将在第一次匹配后搜索匹配。在这种情况下,没有:exec将返回null,并且将重置lastIndex属性

例如:

var str = "abcdef";
//         ^ starting index for search is here
var regex = /ab/g;

regex.exec(str);
// str: "abcdef"
//         ^ starting index for search is now here

regex.exec(str);
// no match found from starting index, return null and reset
// str: "abcdef"
//       ^ starting index reset

我为我的脏话等感到抱歉,我还没有完全清醒…

您可能需要从正则表达式中删除g标志,这取决于您想要实现的目标。而且,那些空的捕获组看起来有点不必要


编辑:看来复活打败了我;)

您可能希望从正则表达式中删除g标志,这取决于您想要实现的目标。而且,那些空的捕获组看起来有点不必要

编辑:看来复活打败了我;)