问题代码
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