加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

浅谈js正则之test要领bug篇

发布时间:2020-11-18 04:18:44 所属栏目:站长百科 来源:网络整理
导读:着实我很罕用这个,以是之前一向没留意这个题目,自从落叶那厮写了个失常的测试我才去看了下这对象

  短视频,自媒体,达人种草一站处事

着实我很罕用这个,以是之前一向没留意这个题目,自从落叶那厮写了个失常的测试我才去看了下这对象

下面的代码都是在chrome的F12下调试的,各人可以研究一下

先来看个对象吧。

var re = /d/;
console.log( re.test("1") );
console.log( re.test("1") );
console.log( re.test("1") );
console.log( re.test("1") );

所有是 true 没题目。。

再次修改:

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 的属性,是下一次匹配的开始位置。

var re = /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 了,这样才气担保他不出不测。

var re = /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") );

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读