blob: ddfe60c5953198b81edcd0fca7957a11efea921c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
---
title: RegExp.lastIndex
slug: Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex
tags:
- JavaScript
- Property
- RegExp
- Regular Expressions
translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex
---
<div>
{{JSRef("Global_Objects", "RegExp")}}</div>
<h2 id="Summary">概述</h2>
<p><code><strong>lastIndex</strong></code> 是正则表达式的一个可读可写的整型属性,用来指定下一次匹配的起始索引。</p>
<div>
{{js_property_attributes(1,0,0)}}</div>
<h2 id="语法">语法</h2>
<pre class="syntaxbox language-html"><var>lastIndex</var> = <var>regExpObj</var>.lastIndex;</pre>
<h2 id="Description">描述</h2>
<p>只有正则表达式使用了表示全局检索的 "<code>g</code>" 标志时,该属性才会起作用。此时应用下面的规则:</p>
<ul>
<li>如果 <code>lastIndex</code> 大于字符串的长度,则 <code>regexp.test</code> 和 <code>regexp.exec</code> 将会匹配失败,然后 <code>lastIndex</code> 被设置为 0。</li>
<li>如果 <code>lastIndex</code> 等于字符串的长度,且该正则表达式匹配空字符串,则该正则表达式匹配从 <code>lastIndex</code> 开始的字符串。(then the regular expression matches input starting at <code>lastIndex</code>.)</li>
<li>如果 <code>lastIndex</code> 等于字符串的长度,且该正则表达式不匹配空字符串 ,则该正则表达式不匹配字符串,<code>lastIndex</code> 被设置为 0.。</li>
<li>否则,<code>lastIndex</code> 被设置为紧随最近一次成功匹配的下一个位置。</li>
</ul>
<h2 id="示例">示例</h2>
<p>考虑下面的语句:</p>
<pre class="brush: js">var re = /(hi)?/g;</pre>
<p>匹配空字符串</p>
<pre class="brush: js">console.log(re.exec("hi"));
console.log(re.lastIndex);</pre>
<p>返回 <code>["hi", "hi"]</code> ,<code>lastIndex</code> 等于 2。</p>
<pre class="brush: js">console.log(re.exec("hi"));
console.log(re.lastIndex);</pre>
<p>返回 <code>["", undefined]</code>,即一个数组,其第 0 个元素为匹配的字符串。此种情况下为空字符串,是因为 <code>lastIndex</code> 为 2(且一直是 2),"<code>hi</code>" 长度为 2。</p>
<h2 id="规范">规范</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">Specification</th>
<th scope="col">Status</th>
<th scope="col">Comment</th>
</tr>
<tr>
<td>ECMAScript 3rd Edition. Implemented in JavaScript 1.2.</td>
<td>Standard</td>
<td>Initial definition.<br>
JavaScript 1.5: <code>lastIndex</code> is a property of a <code>RegExp</code> instance, not the <code>RegExp</code> object.</td>
</tr>
<tr>
<td>{{SpecName('ES5.1', '#sec-15.10.7.5', 'RegExp.lastIndex')}}</td>
<td>{{Spec2('ES5.1')}}</td>
<td> </td>
</tr>
<tr>
<td>{{SpecName('ES6', '#sec-properties-of-regexp-instances', 'RegExp.lastIndex')}}</td>
<td>{{Spec2('ES6')}}</td>
<td> </td>
</tr>
</tbody>
</table>
<h2 id="浏览器兼容性">浏览器兼容性</h2>
<p>{{ CompatibilityTable() }}</p>
<div>
<table class="compat-table">
<tbody>
<tr>
<th>Feature</th>
<th>Chrome</th>
<th>Firefox (Gecko)</th>
<th>Internet Explorer</th>
<th>Opera</th>
<th>Safari</th>
</tr>
<tr>
<td>Basic support</td>
<td>{{ CompatVersionUnknown() }}</td>
<td>{{ CompatVersionUnknown() }}</td>
<td>{{ CompatVersionUnknown() }}</td>
<td>{{ CompatVersionUnknown() }}</td>
<td>{{ CompatVersionUnknown() }}</td>
</tr>
</tbody>
</table>
</div>
<div>
<table class="compat-table">
<tbody>
<tr>
<th>Feature</th>
<th>Android</th>
<th>Chrome for Android</th>
<th>Firefox Mobile (Gecko)</th>
<th>IE Mobile</th>
<th>Opera Mobile</th>
<th>Safari Mobile</th>
</tr>
<tr>
<td>Basic support</td>
<td>{{ CompatVersionUnknown() }}</td>
<td>{{ CompatVersionUnknown() }}</td>
<td>{{ CompatVersionUnknown() }}</td>
<td>{{ CompatVersionUnknown() }}</td>
<td>{{ CompatVersionUnknown() }}</td>
<td>{{ CompatVersionUnknown() }}</td>
</tr>
</tbody>
</table>
</div>
<h2 id="See_also">相关链接</h2>
<ul>
<li>{{jsxref("RegExp.prototype.ignoreCase")}}</li>
<li>{{jsxref("RegExp.prototype.global")}}</li>
<li>{{jsxref("RegExp.prototype.multiline")}}</li>
<li>{{jsxref("RegExp.prototype.source")}}</li>
<li>{{jsxref("RegExp.prototype.sticky")}}</li>
</ul>
|