欢迎来到代码驿站!

JavaScript代码

当前位置:首页 > 网页前端 > JavaScript代码

解决js相同的正则多次调用test()返回的值却不同的问题

时间:2021-01-07 11:16:46|栏目:JavaScript代码|点击:

代码是这样的:

var reg = /^1[345678][0-9]{9}$/g;
console.log(reg.test(15328044636));
console.log(reg.test(15328044636));

会发现控制台打印的数据却是:

true
false

问题原因

这是因为正则reg的g属性,设置的全局匹配。RegExp有一个lastIndex属性,来保存索引开始位置。

上面的问题,第一次调用的lastIndex值为0,到了第二次调用,值变成了11。

var reg = /^1[345678][0-9]{9}$/g;
console.log(reg.lastIndex, reg.test(15328044636));
console.log(reg.lastIndex, reg.test(15328044636));

//打印的值
0 true
11 false

解决方案

第一种方案是将g去掉,关闭全局匹配。

第二种就是在每次匹配之前将lastIndex的值设置为0。

var reg = /^1[345678][0-9]{9}$/g;
console.log(reg.lastIndex, reg.test(15328044636));
reg.lastIndex = 0;
console.log(reg.lastIndex, reg.test(15328044636));

//打印的值
0 true
0 true

上一篇:实例讲解JavaScript预编译流程

栏    目:JavaScript代码

下一篇:加载远程图片时,经常因为缓存而得不到更新的解决方法(分享)

本文标题:解决js相同的正则多次调用test()返回的值却不同的问题

本文地址:http://www.codeinn.net/misctech/41634.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有