正则表达式_global造成的二次的匹配结果不一致的问题
let num = 77795
const reg = /^[0-9]\d*$/g
console.log(reg.test(num)) // true
console.log(reg.test(num)) // false
- 正则的 lastIndex 从字面上来讲就是最后一个索引,实际上它的意思是正则表达式开始下一次查找的索引位置,第一次的时候总是为 0 的,第一次查找完了的时候会把 lastIndex 的值设为匹配到得字符串的最后一个字符的索引位置加 1,第二次查找的时候会从 lastIndex 这个位置开始,后面的以此类推。如果没有找到,则会把 lastIndex 重置为 0。要注意的是,lastIndex 属性只有在有全局标志正则表达式中才有作用
- 解决: 每次调用前都设置lastIndex值为0
let num = 77795
const reg = /^[0-9]\d*$/g
setInterval(() => {
reg.lastIndex = 0
console.log(reg.test(num)) // true
}, 1000)