## 概述

`lastIndex` 是正则表达式的一个可读可写的整型属性，用来指定下一次匹配的起始索引。

`RegExp.lastIndex` 属性的属性特性：
writable | true
enumerable | false
configurable | false

## 语法

    lastIndex = regExpObj.lastIndex;

## 描述

只有正则表达式使用了表示全局检索的 "`g`" 标志时，该属性才会起作用。此时应用下面的规则：

- 如果 `lastIndex` 大于字符串的长度，则 `regexp.test` 和 `regexp.exec` 将会匹配失败，然后 `lastIndex` 被设置为 0。
- 如果 `lastIndex` 等于字符串的长度，且该正则表达式匹配空字符串，则该正则表达式匹配从 `lastIndex` 开始的字符串。（then the regular expression matches input starting at `lastIndex`.）
- 如果 `lastIndex` 等于字符串的长度，且该正则表达式不匹配空字符串 ，则该正则表达式不匹配字符串，`lastIndex` 被设置为 0.。
- 否则，`lastIndex` 被设置为紧随最近一次成功匹配的下一个位置。

## 示例

考虑下面的语句：

    var re = /(hi)?/g;

匹配空字符串

    console.log(re.exec("hi"));
    console.log(re.lastIndex);

返回 `["hi", "hi"]` ，`lastIndex` 等于 2。

    console.log(re.exec("hi"));
    console.log(re.lastIndex);

返回 `["", undefined]`，即一个数组，其第 0 个元素为匹配的字符串。此种情况下为空字符串，是因为 `lastIndex` 为 2（且一直是 2），"`hi`" 长度为 2。

## 规范

Specification | Status | Comment
--- | --- | ---
ECMAScript 3rd Edition. Implemented in JavaScript 1.2. | Standard | Initial definition. JavaScript 1.5: `lastIndex` is a property of a `RegExp` instance, not the `RegExp` object.
ECMAScript 5.1 (ECMA-262) RegExp.lastIndex | Standard |
ECMAScript 2015 (6th Edition, ECMA-262) RegExp.lastIndex | Standard |

## 浏览器兼容性

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

- Desktop
- Mobile

Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari
--- | --- | --- | --- | --- | ---
Basic support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes)

Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile
--- | --- | --- | --- | --- | --- | ---
Basic support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes)

## 相关链接

- `RegExp.prototype.ignoreCase`
- `RegExp.prototype.global`
- `RegExp.prototype.multiline`
- `RegExp.prototype.source`
- `RegExp.prototype.sticky`