search

Home  >  Q&A  >  body text

javascript的正则表达式的问题

var msg=/[a-z]+/g
undefined
msg.test('dfdfdf')
true
msg.test('dfdfdf')
false
msg.test('dfdfdf')
true

问什么一时返回真一时返回假呢

ringa_leeringa_lee2773 days ago647

reply all(3)I'll reply

  • 巴扎黑

    巴扎黑2017-04-11 11:09:15

    因为题主多次测试都是使用同一个字符串字面量'dfdfdf',
    而在JavaScript中, 正则表达式的g标志有记录lastIndex的功能1,
    所以第一次test记录了lastIndex'dfdfdf'字符串的末尾, 导致第二次test的结果为false,
    并且第二次test由于遍历了'dfdfdf'字符串的末尾(也就是完整地遍历了整个字符串对象里面的内容),
    所以lastIndex指针又重新指向了字符串开头, 然后重新循环.

    所以问题中的测试会是以true, false, true, false的结果交替出现, 如下所示:


    1. MDN-JavaScript 正则表达式 ↩

    reply
    0
  • 天蓬老师

    天蓬老师2017-04-11 11:09:15

    lastIndex。

    reply
    0
  • ringa_lee

    ringa_lee2017-04-11 11:09:15

    var msg=/[a-z]+/

    去掉g, re对象就不会保留位置指针了

    reply
    0
  • Cancelreply