扫码关注官方订阅号
var msg=/[a-z]+/gundefinedmsg.test('dfdfdf')truemsg.test('dfdfdf')falsemsg.test('dfdfdf')true
问什么一时返回真一时返回假呢
ringa_lee
因为题主多次测试都是使用同一个字符串字面量'dfdfdf', 而在JavaScript中, 正则表达式的g标志有记录lastIndex的功能1, 所以第一次test记录了lastIndex为'dfdfdf'字符串的末尾, 导致第二次test的结果为false, 并且第二次test由于遍历了'dfdfdf'字符串的末尾(也就是完整地遍历了整个字符串对象里面的内容), 所以lastIndex指针又重新指向了字符串开头, 然后重新循环.
'dfdfdf'
JavaScript
g
lastIndex
false
所以问题中的测试会是以true, false, true, false的结果交替出现, 如下所示:
true
lastIndex。
var msg=/[a-z]+/
去掉g, re对象就不会保留位置指针了
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
因为题主多次测试都是使用同一个字符串字面量
'dfdfdf',而在
JavaScript中, 正则表达式的g标志有记录lastIndex的功能1,所以第一次test记录了
lastIndex为'dfdfdf'字符串的末尾, 导致第二次test的结果为false,并且第二次test由于遍历了
'dfdfdf'字符串的末尾(也就是完整地遍历了整个字符串对象里面的内容),所以
lastIndex指针又重新指向了字符串开头, 然后重新循环.所以问题中的测试会是以
true,false,true,false的结果交替出现, 如下所示:lastIndex。
var msg=/[a-z]+/去掉
g, re对象就不会保留位置指针了