分析js正则之test方法bug
这篇文章主要介绍“分析js正则之test方法bug”,在日常操作中,相信很多人在分析js正则之test方法bug问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”分析js正则之test方法bug”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
下面的代码都是在chrome的F12下调试的,大家可以研究一下
先来看个东西吧。
varre=/\d/;
console.log(re.test("1"));
console.log(re.test("1"));
console.log(re.test("1"));
console.log(re.test("1"));全部是 true 没问题。。
但是你把 /\d/; 改成 /\d/g; 再试试。
再次修改:
console.log(/\d/g.test("1"));
console.log(/\d/g.test("1"));
console.log(/\d/g.test("1"));
console.log(/\d/g.test("1"));全部是 true,这究竟是为什么呢?
这些结果相当有意思,当然高手自然知道为什么,如果你知道的话,下面其实可以跳过不用看了,全是水文而已。。
正则里有一个 lastIndex 的属性,是下一次匹配的开始位置。
varre=/\d/g;
console.log(re.test("1"),re.lastIndex);
console.log(re.test("1"),re.lastIndex);
console.log(re.test("1"),re.lastIndex);
console.log(re.test("1"),re.lastIndex);可以看到 第一次匹配结果为 true 表示匹配成功,此时 lastIndex 记录下一次匹配的起始位置为 1。于是第二次匹配的时候 从 "1" 字符串索引 1 的位置匹配,当然就匹配失败了,因为这个字符串只有一个字符,他的索引是 0。
而 /\d/g.test("1") 这个为什么每次匹配成功能呢?因为它直接用正则字面量,相当于每次重新创建一个正则对象,lastIndex 属性的初始值是 0。所以每次都能匹配成功。
现在是不是理解了,包括 exec 也一样,每次匹配一个,lastIndex 记录下次匹配的起始位置。如果非要用一个正则对象的,那就只有每次 test 前重置 lastIndex 了,这样才能保证他不出意外。
varre=/\d/g;
console.log(re.test("1"));
re.lastIndex=0;
console.log(re.test("1"));
re.lastIndex=0;
console.log(re.test("1"));
re.lastIndex=0;
console.log(re.test("1"));到此,关于“分析js正则之test方法bug”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注恰卡编程网网站,小编会继续努力为大家带来更多实用的文章!
推荐阅读
-
node如何链接多个JS模块
node如何链接多个JS模块本文小编为大家详细介绍“node如何链...
-
前后端全部用 JS 开发是什么体验(Hybrid + Egg.js经验分享)上
-
换一种思维看待PHP VS Node.js
-
JS遍历数组的三种方法map、forEach与filter实例详解
-
物联网宠儿mqtt.js那些事儿
-
js不跳转传值php
-
Node.js基本内容和知识点
简单的说node.js就是运行在服务端的JavaScript,起初段定位是后端开发语言,由于技术的不够成熟,一般小型项目...
-
为什么选择 Node.js 作为 Web 应用程序?
-
node.js后台快速搭建在阿里云(一)(express篇)
-
基于WebRTC 如何借助Laravel 7和Vue.js创建视频聊天应用
本文介绍了如何借助Vue.js和laravel7创建一个简单的视频聊天应用。如何实现视频聊天我们会用到一个免...
