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


Posted in Javascript onOctober 10, 2018

代码是这样的:

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

以上这篇解决js相同的正则多次调用test()返回的值却不同的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
利用js的Node遍历找到repeater的一个字段实例介绍
Apr 25 Javascript
Javascript和Java获取各种form表单信息的简单实例
Feb 14 Javascript
javascript中call,apply,bind的用法对比分析
Feb 12 Javascript
JavaScript实现的encode64加密算法实例分析
Apr 15 Javascript
javascript实现获取字符串hash值
May 10 Javascript
angular.bind使用心得
Oct 26 Javascript
JS结合bootstrap实现基本的增删改查功能
Jul 22 Javascript
Bootstrap栅格系统使用方法及页面调整变形的解决方法
Mar 10 Javascript
JS ES6中setTimeout函数的执行上下文示例
Apr 27 Javascript
jQuery修改DOM结构_动力节点Java学院整理
Jul 05 jQuery
Layer组件多个iframe弹出层打开与关闭及参数传递的方法
Sep 25 Javascript
详解vue中多个有顺序要求的异步操作处理
Oct 29 Javascript
jQuery 获取除某指定对象外的其他对象 ( :not() 与.not())
Oct 10 #jQuery
微信小程序自定义组件的实现方法及自定义组件与页面间的数据传递问题
Oct 09 #Javascript
从零开始封装自己的自定义Vue组件
Oct 09 #Javascript
vue axios 简单封装以及思考
Oct 09 #Javascript
angularJS实现不同视图同步刷新详解
Oct 09 #Javascript
对angular 实时更新模板视图的方法$apply详解
Oct 09 #Javascript
AngularJs返回前一页面时刷新一次前面页面的方法
Oct 09 #Javascript
You might like
xml+php动态载入与分页
2006/10/09 PHP
PHP编程与应用
2006/10/09 PHP
php 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
2008/11/14 PHP
php构造函数的继承方法
2015/02/09 PHP
[原创]smarty简单模板变量输出方法
2016/07/09 PHP
Laravel Memcached缓存驱动的配置与应用方法分析
2016/10/08 PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
2017/02/04 PHP
PHP实现微信图片上传到服务器的方法示例
2017/06/29 PHP
解决AJAX中跨域访问出现'没有权限'的错误
2008/08/20 Javascript
浅析用prototype定义自己的方法
2013/11/14 Javascript
jquery实现动态改变div宽度和高度
2015/05/08 Javascript
AngularJs学习第五篇从Controller控制器谈谈$scope作用域
2016/06/08 Javascript
jquery自动补齐功能插件flexselect用法示例
2016/08/06 Javascript
vue router 传参获取不到的解决方式
2019/11/13 Javascript
原生js实现下拉选项卡
2019/11/27 Javascript
基于原生js实现九宫格算法代码实例
2020/07/03 Javascript
[05:08]顺网杯ISS-DOTA2赛歌 少女偶像Lunar青春演绎
2013/12/05 DOTA
[01:57]DOTA2上海特锦赛小组赛解说单车采访花絮
2016/02/27 DOTA
[00:32]2018DOTA2亚洲邀请赛iG出场
2018/04/03 DOTA
Python version 2.7 required, which was not found in the registry
2014/08/26 Python
python根据开头和结尾字符串获取中间字符串的方法
2015/03/26 Python
Python中的super()方法使用简介
2015/08/14 Python
python爬虫_自动获取seebug的poc实例
2017/08/05 Python
Python数据结构与算法之列表(链表,linked list)简单实现
2017/10/30 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
2018/07/30 Python
Python的matplotlib绘图如何修改背景颜色的实现
2019/07/16 Python
Pandas0.25来了千万别错过这10大好用的新功能
2019/08/07 Python
Python使用matplotlib实现交换式图形显示功能示例
2019/09/06 Python
python 动态调用函数实例解析
2019/10/21 Python
Python3的unicode编码转换成中文的问题及解决方案
2019/12/10 Python
python:删除离群值操作(每一行为一类数据)
2020/06/08 Python
对python中list的五种查找方法说明
2020/07/13 Python
python3跳出一个循环的实例操作
2020/08/18 Python
员工工作表扬信范文
2014/01/13 职场文书
离婚答辩状范文
2015/05/22 职场文书
想要创业,那么你做好准备了吗?
2019/07/01 职场文书