84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
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对象就不会保留位置指针了
因为题主多次测试都是使用同一个字符串字面量
'dfdfdf'
,而在
JavaScript
中, 正则表达式的g
标志有记录lastIndex
的功能1,所以第一次test记录了
lastIndex
为'dfdfdf'
字符串的末尾, 导致第二次test的结果为false
,并且第二次test由于遍历了
'dfdfdf'
字符串的末尾(也就是完整地遍历了整个字符串对象里面的内容),所以
lastIndex
指针又重新指向了字符串开头, 然后重新循环.所以问题中的测试会是以
true
,false
,true
,false
的结果交替出现, 如下所示:lastIndex。
var msg=/[a-z]+/
去掉
g
, re对象就不会保留位置指针了