JS正则test( )两次执行结果不一样
看一个示例:
const ints = /^[0-9]*$/g const str = 12345 console.log(ints.test(str)) // true console.log(ints.test(str)) // false
ints中包含一个默认属性:lastIndex,用于规定下次匹配的起始位置。上次匹配的结果是由方法 RegExp.test( )
找到的,它们都以 lastIndex 属性所指的位置作为下次检索的起始点。这样,就可以通过反复调用这两个方法来遍历一个字符串中的所有匹配文本。而且需要注意,该属性只有设置标志 g才能使用。
解决方式:
1、去掉正则中的g
const ints = /^[0-9]*$/
const str = 12345
console.log(ints.test(str)) // true
console.log(ints.test(str)) // true
2、 需要全局匹配( g )的情况:重置lastIndex =0
const ints = /^[0-9]*$/g
const str = 12345
console.log(ints.test(str)) // true
console.log(ints.test(str)) // false
ints.lastIndex = 0
console.log(ints.test(str)) // true