在Chrome和Firefox中每两次尝试匹配字符串一次的Javascript常规异常
我有以下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
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标志,这取决于您想要实现的目标。而且,那些空的捕获组看起来有点不必要 编辑:看来复活打败了我;)