解决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 相关文章推荐
javascript中length属性的探索
Jul 31 Javascript
JS 弹出层 定位至屏幕居中示例
May 21 Javascript
jquery制作图片时钟特效
Mar 30 Javascript
Sea.JS知识总结
May 05 Javascript
JavaScript的String字符串对象常用操作总结
May 26 Javascript
javascript 四十条常用技巧大全
Sep 09 Javascript
原生JS实现跑马灯效果
Feb 20 Javascript
教你用Cordova打包Vue项目的方法
Oct 17 Javascript
JS与CSS3实现图片响应鼠标移动放大效果示例
May 04 Javascript
JavaScript实现创建自定义对象的常用方式总结
Jul 09 Javascript
Echarts实现单条折线可拖拽效果
Dec 19 Javascript
vue使用refs获取嵌套组件中的值过程
Mar 31 Vue.js
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
PHP 操作文件的一些FAQ总结
2009/02/12 PHP
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
2014/06/12 PHP
php中socket通信机制实例详解
2015/01/03 PHP
10个超级有用值得收藏的PHP代码片段
2015/01/22 PHP
php实现检查文章是否被百度收录
2015/01/27 PHP
PHP 匿名函数与注意事项详细介绍
2016/11/26 PHP
PHP实现图片批量打包下载功能
2017/03/01 PHP
异步javascript的原理和实现技巧介绍
2012/11/08 Javascript
理解Javascript闭包
2013/11/01 Javascript
javascript实现禁止复制网页内容
2014/12/16 Javascript
浅谈 javascript 事件处理
2015/01/04 Javascript
Javascript 基础---Ajax入门必看
2016/07/06 Javascript
JavaScript动态检验密码强度的实现方法
2016/11/09 Javascript
Vue.js render方法使用详解
2017/04/05 Javascript
在使用JSON格式处理数据时应该注意的问题小结
2017/05/20 Javascript
vue兄弟组件传递数据的实例
2018/09/06 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
2018/09/26 Javascript
vue.js引入外部CSS样式和外部JS文件的方法
2019/01/06 Javascript
javascript设计模式之装饰者模式
2020/01/30 Javascript
JS面向对象编程基础篇(一) 对象和构造函数实例详解
2020/03/03 Javascript
学习python (2)
2006/10/31 Python
Python 爬虫多线程详解及实例代码
2016/10/08 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
Python字典及字典基本操作方法详解
2018/01/30 Python
python消除序列的重复值并保持顺序不变的实例
2018/11/08 Python
Python中如何导入类示例详解
2019/04/17 Python
python 多线程对post请求服务器测试并发的方法
2019/06/13 Python
PyTorch 对应点相乘、矩阵相乘实例
2019/12/27 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
2020/03/12 Python
python实现人像动漫化的示例代码
2020/05/17 Python
keras 权重保存和权重载入方式
2020/05/21 Python
python求numpy中array按列非零元素的平均值案例
2020/06/08 Python
python通过函数名调用函数的几种场景
2020/09/23 Python
房地产活动策划方案
2014/05/14 职场文书
幼儿园标语大全
2014/06/19 职场文书
中国梦团日活动总结
2014/07/07 职场文书