js相同的正则多次调用test()返回的值却不同的问题
js代码:
var name = '测试中文';// 姓名 var nameRgexp = new RegExp("[a-zA-Z\u4e00-\u9fa5]{2,}","g"); console.log(nameRgexp.test(name)); // true var company = '测试中文';// 和name一样的值 console.log(nameRgexp.test(company)); // false
问题原因:
这是因为正则reg
的g
属性,设置的全局匹配。RegExp
有一个lastIndex
属性,来保存索引开始位置。
上面的问题,第一次调用的lastIndex
值为0,到了第二次调用就不是0了
解决方案
- 第一种方案是将
g
去掉,关闭全局匹配。 - 第二种就是在每次匹配之前将
lastIndex
的值设置为0。
来源:https://blog.csdn.net/qq_30100043/article/details/80092012