正则中的lastIndex属性

首先大家看下下面的代码

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

输出都是true。

好的,接下来我们看这段代码

var reg = /\d/g;
console.log( reg.test("1") );
console.log( reg.test("1") );

一个true,一个false,这是什么情况?

正则对象有一个lastIndex属性,它记录的是下一次匹配开始的位置。

var reg = /\d/g;
console.log( reg.test("1"), reg.lastIndex );
console.log( reg.test("1"), reg.lastIndex );

我们可以看到, 第一次匹配, lastIndex 记录下一次匹配的起始位置,值为 1
第二次匹配的时候 从 "1" 字符串索引 1 的位置匹配,因为这个字符串只有一个字符,匹配失败,索引值复位,为0。

我们再看下面的代码:

console.log( /\d/g.test("1"), reg.lastIndex );
console.log( /\d/g.test("1"), reg.lastIndex );

为什么两次都是true?

因为/\d/g.test("1")使用的是直接正则字面量,相当于每次都初始化一个正则对象,lastIndex值每次都为初始值0。

 

 

posted @ 2014-06-07 14:05  卡布其诺猫  阅读(201)  评论(0编辑  收藏  举报