js正则表达式的小bug

正则表达式的bug
  • 在一次 意外中,我偶然发现了正则表达式的小bug,bug是这样的:
const reg = /^ll/g
const str = "llo"
console.log(reg.test(str))
console.log(reg.test(str))
console.log(reg.test(str))
console.log(reg.test(str))
  • 一般来说,理想中的 结果应该是 4个true,但实际上是 true false true false,如下
    在这里插入图片描述
  • 这就造成了问题,当 第二次调用 test的时候用,显示的就是 false,这多多少少会是代码出现一些小的问题,我们要求的是 符合正则的就一定是true,不符合正则的就一定是false,不存在第一次符合,第二次不符合这种矛盾的情况
  • 为此只能 自定义一个函数来 替代这个 test()
if(!RegExp.prototype.pass){
    RegExp.prototype.pass = function(s){
        return this.test(s) || this.test(s)
    }
}
  • 测试一下:
const reg = /^ll/g
const s1 = "llood"
const s2 = "lolood"
console.log(reg.pass(s1))
console.log(reg.pass(s1))
console.log(reg.pass(s1))
console.log(reg.pass(s1))
console.log(reg.pass(s2))
console.log(reg.pass(s2))
console.log(reg.pass(s2))
console.log(reg.pass(s2))

在这里插入图片描述

  • 这样问题就是解决了,但是呢,对于为什么 test() 函数胡一出现这种矛盾的情况,我还是不太理解23333
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值