RegExp.test(JavaScript)的错误

Her*_*ott 4 javascript regex debugging

我在我的代码中找到了有趣的问题.是我的代码的简化版本.regex.test每次调用时,调用都会更改其输出值.您可以尝试使用'select on selection'在devtools中执行此操作,它将显示不同的值.

dav*_*ave 8

问题是你正在使用/g你的正则表达式 - 当使用它时,正则表达式被执行多次,它将始终从它上次停止的地方开始.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex

仅当正则表达式实例使用"g"标志指示全局搜索时,才会设置此属性.以下规则适用:

如果lastIndex大于字符串的长度,则test()和exec()失败,则lastIndex设置为0.

如果lastIndex等于字符串的长度,并且正则表达式与空字符串匹配,则正则表达式匹配从lastIndex开始的输入.

如果lastIndex等于字符串的长度,并且正则表达式与空字符串不匹配,则正则表达式与输入不匹配,并且lastIndex重置为0.

否则,lastIndex将设置为最近一次匹配后的下一个位置.

您可以通过console.log(regex.lastIndex)循环来验证这一点:

for (var a = 0; a < 10; a++) {
    console.log(regex.lastIndex)
    if (!regex.test(inner)) {
        log.innerHTML += "true";
    }
    else {
        log.innerHTML += "false";
    }

    log.innerHTML += " ";
}
Run Code Online (Sandbox Code Playgroud)

并且你将看到它在0 18之间交替.因此,当它从0开始时,它匹配,当它从18开始时,它不匹配.