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

作者:专注前端30年 时间:2024-04-17 09:42:18 

代码是这样的:


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

来源:https://blog.csdn.net/qq_30100043/article/details/80092012

标签:js,test
0
投稿

猜你喜欢

  • python实现求最长回文子串长度

    2022-09-29 13:56:32
  • matplotlib基本图形绘制操作实例

    2023-07-14 18:18:01
  • Python中赋值运算符的含义与使用方法

    2022-05-21 12:13:45
  • 动态加载JS文件的三种方法

    2024-05-21 10:14:28
  • JavaScript初级教程(第五课续)第1/3页

    2024-04-17 10:10:07
  • asp.net微信开发(永久素材管理)

    2023-07-21 13:02:45
  • Python实战使用Selenium爬取网页数据

    2021-06-18 19:11:56
  • xmlHttp msxml3.dll 错误 '800c0008' 解决办法

    2008-08-31 20:44:00
  • python日志通过不同的等级打印不同的颜色(示例代码)

    2022-08-18 01:47:25
  • Vue3中简单使用Mock.js方法实例分析

    2024-04-28 09:28:05
  • JS代码的格式化和压缩

    2007-10-17 21:17:00
  • 详解vue中的computed的this指向问题

    2024-04-27 15:46:56
  • Python代码块及缓存机制原理详解

    2023-07-02 08:12:07
  • PyTorch 1.0 正式版已经发布了

    2021-12-09 23:54:57
  • 面试官常问之说说js中var、let、const的区别

    2024-05-09 15:06:58
  • python进度条库tqdm的基本操作方法

    2021-03-02 08:31:22
  • Python基础知识方法重写+文件处理+异常处理

    2022-09-20 06:43:43
  • 面向对象的XHTML与CSS编程

    2008-01-11 13:37:00
  • 趣用文化元素

    2009-09-03 11:53:00
  • .NET多种数据库大数据批量插入、更新(支持SqlServer、MySql、PgSql和Oracle)

    2024-01-19 07:39:40
  • asp之家 网络编程 m.aspxhome.com