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

 更新时间:2018年10月10日 08:59:02   作者:专注前端30年  
今天小编就为大家分享一篇解决js相同的正则多次调用test()返回的值却不同的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

代码是这样的:

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()返回的值却不同的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 点击标签切换和自动切换DIV选项卡

    点击标签切换和自动切换DIV选项卡

    点击标签切换DIV的效果,在很多地方都有见到过,而且实现的方法有很多,本例介绍的这个可以切换和自动切换DIV选项卡
    2014-08-08
  • 常用参考资料(手册)下载或者链接

    常用参考资料(手册)下载或者链接

    常用参考资料(手册)下载或者链接...
    2006-07-07
  • JavaScript中实现new的两种方式引发的探究

    JavaScript中实现new的两种方式引发的探究

    众所周知JS中new的作用是通过构造函数来创建一个实例对象,这篇文章主要给大家介绍了关于JavaScript中实现new的两种方式引发的相关资料,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • 学习javascript,实现插入排序实现代码

    学习javascript,实现插入排序实现代码

    首先新建一个空列表,用于保存已排序的有序数列(我们称之为"有序列表")。从原数列中取出一个数,将其插入"有序列表"中,使其仍旧保持有序状态。
    2011-07-07
  • js中比较两个对象是否相同的方法示例

    js中比较两个对象是否相同的方法示例

    这篇文章主要介绍了js中比较两个对象是否相同的方法,结合实例形式详细分析了js对象遍历、判断等相关操作技巧,需要的朋友可以参考下
    2019-09-09
  • 值得分享的轻量级Bootstrap Table表格插件

    值得分享的轻量级Bootstrap Table表格插件

    这篇文章为大家分享了轻量级Bootstrap Table表格插件,以表格的形式显示的数据,支持单选,复选框,排序,分页,显示/隐藏列等操作,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • js实现模态框拖拽

    js实现模态框拖拽

    这篇文章主要为大家详细介绍了js实现模态框拖拽效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • JS实现从网页顶部掉下弹出层效果的方法

    JS实现从网页顶部掉下弹出层效果的方法

    这篇文章主要介绍了JS实现从网页顶部掉下弹出层效果的方法,实例分析了javascript创建弹出窗口及窗口掉落与抖动效果实现方法,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • 借助FileReader实现将文件编码为Base64后通过AJAX上传

    借助FileReader实现将文件编码为Base64后通过AJAX上传

    这篇文章主要介绍了借助FileReader实现将文件编码为Base64后通过AJAX上传的方法,包括后端对文件数据解码并保存的PHP代码,需要的朋友可以参考下
    2015-12-12
  • JavaScript如何删除字符串中子字符串

    JavaScript如何删除字符串中子字符串

    本文介绍了如何从 JavaScript 中的字符串中删除子字符串,并提供了两种常用的方法:replace() 方法和 split() 方法,结合示例代码给大家介绍的非常详细,需要的朋友参考下吧
    2023-05-05

最新评论