问题
在使用js正则的test方法时,一会返回true一会返回false。
如图:
原因
参考 MDN Web Docs 文档
如果正则表达式设置了全局标志,test() 的执行会改变正则表达式 lastIndex 属性。连续的执行test()方法,后续的执行将会从 lastIndex 处开始匹配字符串,(exec() 同样改变正则本身的 lastIndex 属性值).
下面的实例表现了这种行为:
var regex = /foo/g;
// regex.lastIndex is at 0
regex.test('foo'); // true
// regex.lastIndex is now at 3
regex.test('foo'); // false
解决
只要在每次执行完 test 方法后,手动清空 lastIndex 即可。
var regex = /foo/g;
regex.test('foo'); // true
regex.lastIndex = 0
regex.test('foo'); // true
regex.lastIndex = 0