热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

RegExp.test(JavaScript)的错误

如何解决《RegExp.test(JavaScript)的错误》经验,为你挑选了1个好方法。

我在我的代码中找到了有趣的问题.这是我的代码的简化版本.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开始时,它不匹配.


推荐阅读
author-avatar
手机用户2502925313
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有