扫码关注官方订阅号
代码如下:
var reg=/\b\w+\b/g; reg.test('abcd'); //true or false? 'abcd'.match(reg);
为什么浏览器运行出来,对同一个串测试,时而false,时而true呢? 但是match的结果是不变的。
人生最曼妙的风景,竟是内心的淡定与从容!
var reg=/\b\w+\b/g; // 1reg.test('abcd'); // 2 准确描述:重复执行第二行的时候,奇数次结果为true,偶数次结果为false。 如果我们把代码改成:/\b\w+\b/g.test('abcd'); 执行的结果就一直为true了。所以我们有理由怀疑是复用RegExp对象带来的问题。
var reg=/\b\w+\b/g; // 1
reg.test('abcd'); // 2
/\b\w+\b/g.test('abcd');
去搜索了一圈,在Mozilla的网站上,找到这么一句:
test called multiple times on the same global regular expression instance will advance past the previous match.
test
因为例子中的正则带了g,所以每次调用test方法会先获取一个隐藏属性lastIndex,会跳过上次已经搜索过的部分。
g
lastIndex
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
var reg=/\b\w+\b/g; // 1reg.test('abcd'); // 2准确描述:重复执行第二行的时候,奇数次结果为true,偶数次结果为false。
如果我们把代码改成:
/\b\w+\b/g.test('abcd');执行的结果就一直为true了。所以我们有理由怀疑是复用RegExp对象带来的问题。
去搜索了一圈,在Mozilla的网站上,找到这么一句:
因为例子中的正则带了
g,所以每次调用test方法会先获取一个隐藏属性lastIndex,会跳过上次已经搜索过的部分。