该
RegExp对象跟踪
lastIndex发生匹配的位置,因此在后续匹配中,它将从上次使用的索引开始,而不是从0开始。
var query = 'Foo B';var re = new RegExp(query, 'gi');var result = [];result.push(re.test('Foo Bar'));alert(re.lastIndex);result.push(re.test('Foo Bar'));如果您不想
lastIndex在每次测试后手动重置为0,只需删除该
g标志即可。
这是规范规定的算法(第15.10.6.2节):
RegExp.prototype.exec(字符串)
对正则表达式执行字符串的正则表达式匹配,并返回包含匹配结果的Array对象;如果字符串不匹配,则返回null。在字符串ToString(string)中搜索正则表达式模式的出现,如下所示:
- 令S为ToString(string)的值。
- 令length为S的长度。
- 令lastIndex为lastIndex属性的值。
- 令我为ToInteger(lastIndex)的值。
- 如果全局属性为false,则让i = 0。
- 如果I <0或I> length,则将lastIndex设置为0并返回null。
7.
调用[[Match]],为其指定参数S和i。如果[[Match]]返回失败,请转到步骤8;否则,请转到步骤8。否则,使r为其State结果,然后转到步骤10。- 令i = i + 1。
- 转到步骤6。
- 令e为r的endIndex值。
- 如果global属性为true,则将lastIndex设置为e。
- 令n为r的捕获数组的长度。(此值与15.10.2.1的NCapturingParens相同。)
- 返回具有以下属性的新数组:
- index属性设置为匹配的字符串在完整字符串S中的位置。
- 输入属性设置为S。
- length属性设置为n + 1。
- 将0属性设置为匹配的子字符串(即,偏移量i包括端和偏移量e排除之间的S部分)。
- 对于使i> 0并且I≤n的每个整数i,将名为ToString(i)的属性设置为r的捕获数组的第i个元素。



