犯罪嫌疑人X
String#searchString#splitString#matchString#replaceRegExp#testRegExp#exec字符串的四个方法,每次匹配时,都是从0开始的,即lastIndex属性始终不变。而正则实例的两个方法exec、test,当正则是全局匹配时,每一次匹配完成后,都会修改lastIndex。下面让我们以test为例,看看你是否会迷糊:var regex = /a/g;console.log( regex.test("a"), regex.lastIndex );console.log( regex.test("aba"), regex.lastIndex );console.log( regex.test("ababc"), regex.lastIndex );// => true 1// => true 3// => false 0注意上面代码中的第三次调用test,因为这一次尝试匹配,开始从下标lastIndex即3位置处开始查找,自然就找不到了。如果没有g,自然都是从字符串第0个字符处开始尝试匹配:var regex = /a/;console.log( regex.test("a"), regex.lastIndex );console.log( regex.test("aba"), regex.lastIndex );console.log( regex.test("ababc"), regex.lastIndex );// => true 0// => true 0// => true 0摘抄自:老姚的文章正则表达式编程-2.4 修饰符g,对exex和test的影响希望对你有帮助。