[RegExp]正则表达式中global方式的特性

[RegExp]正则表达式中global模式的特性

一直不是很清楚javascript的global到底表现在哪些方面,所以今天特地做了几个测试:

var str = 'bbaaabb',

  reg = /^b|b$/;

  while(reg.test(str)){
    str = str.replace(reg,'');
    console.log(reg.lastIndex + ":" + str);
  }

最终结果:

//0:baaabb
//0:aaabb
//0:aaab
//0:aaa

但是如果稍做一些修改

var str = 'bbaaabb',

  reg = /^b|b$/g;

  while(reg.test(str)){
    str = str.replace(reg,'');
    console.log(reg.lastIndex + ":" + str);
  }

最终结果则是:

//0:baaab
//0:aaa

这样的结果说明,global模式下,在匹配到了开始的b字符后,还将继续匹配结尾的b字符,从而忽视掉中间"|"操作符。