String#search String#split String#match String#replace RegExp#test RegExp#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的影响希望对你有帮助。
字符串的四个方法,每次匹配时,都是从
0
开始的,即lastIndex
属性始终不变。而正则实例的两个方法
exec
、test
,当正则是全局匹配时,每一次匹配完成后,都会修改lastIndex
。下面让我们以test
为例,看看你是否会迷糊:注意上面代码中的第三次调用
test
,因为这一次尝试匹配,开始从下标lastIndex
即3
位置处开始查找,自然就找不到了。如果没有
g
,自然都是从字符串第0
个字符处开始尝试匹配:摘抄自:老姚的文章正则表达式编程-2.4 修饰符g,对exex和test的影响
希望对你有帮助。