问题代码

const reg = /.*/g
const arr = ['aaa','bb']
arr.forEach(i=>{
    console.log('匹配结果:'+reg.test(i))
})
匹配结果:true
匹配结果:false

原因

const reg = /.*/g为全局正则表达式,会记录上一次的匹配字符的index+1(lastIndex),下一次匹配时就会从lastIndex处为起点开始匹配,匹配失败则将lastIndex置为0如下:

const reg = /.*/g
const arr = ['aaa','bb']
arr.forEach(i=>{
    console.log('匹配结果:'+reg.test(i),'lastIndex值:'+reg.lastIndex)
})
匹配结果:true
lastIndex值:3
匹配结果:false
lastIndex值:0

解决

每次使用前或后将lastIndex置为0

const reg = /.*/g
const arr = ['aaa','bb']
arr.forEach(i=>{
    reg.lastIndex = 0
    console.log('匹配结果:'+reg.test(i))
})
匹配结果:true
匹配结果:true
posted on 2022-03-10 14:43  吞天泡泡龙  阅读(205)  评论(0编辑  收藏  举报