var str = "p1 p2 p3 p4";
// 1)  var reg = /(^| +)p4( +|$)/g;
// 2)  var reg = /(^| +)p4( +|$)/;
console.log(reg.test(str));有g的时候是false
没有g的时候是true
想问一下,g是全局匹配,为什么反而返回false?用的是Chrome 浏览器。

解决方案 »

  1.   

    因为每次调用的时候,lastlength都向匹配的位置移动,加上g所以就为false
      

  2.   

    这个跟正则对象的lastIndex属性有关。当启用g标识的话,也就启用了lastIndex属性,这个是用来记录匹配到的位置,当从此位置匹配发现没匹配上,就会返回false。所以调用test()方法的时候,不要加g标识就可以了
      

  3.   

    加了g的正则表达式在调用test()方法之后会更新正则对象的lastIndex属性(字符串匹配的结束位置)。
    在对同一个正则对象第二次调用test()时会从正则对象的lastIndex的位置开始查找、而不是从头开始查找。不加g的正则对象不会自动更新的lastIndex属性。lastIndex属性始终是0