您的位置:首页 > Web前端 > JavaScript

javascript正则(带g符号) 多次调用test 结果交替出现

2016-08-14 13:58 363 查看
链接:https://segmentfault.com/q/1010000000582051
http://stackoverflow.com/questions/2851308/why-does-my-javascript-regex-test-give-alternating-results
如图:



参考部分:

var reg=/\b\w+\b/g; // 1


reg.test('abcd'); // 2


准确描述:重复执行第二行的时候,奇数次结果为true,偶数次结果为false。

如果我们把代码改成:

/\b\w+\b/g.test('abcd');


执行的结果就一直为true了。所以我们有理由怀疑是复用RegExp对象带来的问题。

去搜索了一圈,在Mozilla的网站上,找到这么一句:


test
called multiple times
on the same global regular expression instance will advance past the previous match.



因为例子中的正则带了
g
,所以每次调用
test
方法会先获取一个隐藏属性
lastIndex
,会跳过上次已经搜索过的部分。

第偶数次调用test的时候,就从前一次的lastIndex开始搜索。结果搜不到,就返回false。lastIndex置为0,下一次调用时,就又能搜到了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: