
正文
正则表达式test验证的“bug”
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
在使用正则表达式对某些字符串进行验证时,我们常常会使用到test方法,而该方法也隐藏着一个陷阱,今天就让我们来看一下这个问题。
var str = 'hello jack, hello rose';
var reg = /jack/g;
reg.test(str); //true
reg.test(str); //false
正如上面显示的结果一样,第一次是true,第二次是false,而不是我们所想的false、false
那么为什么会出现这种情况?
原因是正则表达式后面加上了全局参数g之后,每当使用test进行一次校验,在正则表达式内部就会有一个lastIndex来记录匹配的位置
还是以上面的代码为例
第一次进行test之后,lastIndex就变成了10,第二次test就是从位置10开始匹配,而不是从位置0开始了,所以就无法匹配到jack了,因此结果为false。
有时候我们希望每次都是从头开始匹配,那么我们要如何来解决这个问题?
1.去掉全局参数g
2.每次使用后将lastIndex清0,即reg.lastIndex=0
3.不将正则表达式保存到变量,即/jack/g.test(str) 或者 /jack/.test(str)





![【电子书】[外文书籍] 《身份(精制精排)》[捷克][ 米兰·昆德拉][epub+mobi] 【电子书】[外文书籍] 《身份(精制精排)》[捷克][ 米兰·昆德拉][epub+mobi]](https://www.04ip.com/template/qe/style/noimg/16.jpg)
