作者:手机用户2502925313 | 来源:互联网 | 2023-02-04 16:24
我在我的代码中找到了有趣的问题.这是我的代码的简化版本.regex.test
每次调用时,调用都会更改其输出值.您可以尝试使用'select on selection'在devtools中执行此操作,它将显示不同的值.
1> dave..:
问题是你正在使用/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 += " ";
}
并且你将看到它在0 18之间交替.因此,当它从0开始时,它匹配,当它从18开始时,它不匹配.