aboutsummaryrefslogtreecommitdiff
path: root/files/ru/web/javascript/reference/global_objects/regexp/lastindex/index.html
blob: 3b9b80efea036b3d2b4522ac7055e6fe07e3d186 (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
122
123
124
125
126
127
128
129
130
---
title: RegExp.lastIndex
slug: Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex
tags:
  - JavaScript
  - Property
  - Reference
  - RegExp
  - регулярные выражения
translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex
---
<div>{{JSRef("Global_Objects", "RegExp")}}</div>

<h2 id="Summary" name="Summary">Сводка</h2>
<p>Свойство <strong><code>lastIndex</code></strong> является целочисленным свойством регулярного выражения, доступным как для чтения, так и для записи, которое определяет индекс, с которого следует начинать следующее сопоставление.</p>

<div>{{js_property_attributes(1, 0, 0)}}</div>

<h2 id="Syntax" name="Syntax">Синтаксис</h2>
<pre class="syntaxbox"><code><var>regExpObj</var>.lastIndex</code></pre>

<h2 id="Description" name="Description">Описание</h2>
<p>Это свойство устанавливается только в том случае, если в регулярном выражении используется флаг <code>"g"</code>, указывающий на необходимость глобального поиска. Оно подчиняется следующим правилам:</p>
<ul>
 <li>Если свойство <code>lastIndex</code> больше длины строки, методы {{jsxref("RegExp.prototype.test()", "test()")}} и {{jsxref("RegExp.prototype.exec()", "exec()")}} завершатся с неудачей, а свойство <code>lastIndex</code> будет установлено в 0.</li>
 <li>Если свойство <code>lastIndex</code> равно длине строки и регулярное выражение сопоставляется с пустой строкой, то регулярное выражение начнёт сопоставляться, начиная с позиции <code>lastIndex</code>.</li>
 <li>Если свойство <code>lastIndex</code> равно длине строки и регулярное выражение не сопоставляется с пустой строкой, то регулярное выражение не соответствует входу и свойство <code>lastIndex</code> сбрасывается в 0.</li>
 <li>Во всех остальных случаях свойство <code>lastIndex</code> устанавливается в позицию, следующую за самым последним сопоставлением.</li>
</ul>

<h2 id="Examples" name="Examples">Примеры</h2>

<h3 id="Example:_Using_lastIndex" name="Example:_Using_lastIndex">Пример: использование свойства <code>lastIndex</code></h3>
<p>Рассмотрим следующую последовательность инструкций:</p>
<pre class="brush: js">var re = /(привет)?/g;
</pre>
<p>Сопоставляется с пустой строкой.</p>
<pre class="brush: js">console.log(re.exec('привет'));
console.log(re.lastIndex);
</pre>
<p>Выведет массив <code>["привет", "привет"]</code>, а свойство <code>lastIndex</code> будет равным 6.</p>
<pre class="brush: js">console.log(re.exec('привет'));
console.log(re.lastIndex);
</pre>
<p>Выведет массив <code>["", undefined]</code>, «пустой» массив, чей нулевой элемент является сопоставившейся строкой. В данном случае, ей является пустая строка, поскольку свойство <code>lastIndex</code> было равно 6 (и остаётся равным 6), а строка <code>"привет"</code> имеет длину 6.</p>

<h2 id="Specifications" name="Specifications">Спецификации</h2>
<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Спецификация</th>
   <th scope="col">Статус</th>
   <th scope="col">Комментарии</th>
  </tr>
  <tr>
   <td>ECMAScript 3-е издание.</td>
   <td>Стандарт</td>
   <td>Изначальное определение. Реализована в JavaScript 1.2.<br>
    JavaScript 1.5: свойство <code>lastIndex</code> является свойством экземпляра {{jsxref("RegExp")}}, а не самого объекта {{jsxref("RegExp")}}.</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="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
<div>{{CompatibilityTable}}</div>
<div id="compat-desktop">
 <table class="compat-table">
  <tbody>
   <tr>
    <th>Возможность</th>
    <th>Chrome</th>
    <th>Firefox (Gecko)</th>
    <th>Internet Explorer</th>
    <th>Opera</th>
    <th>Safari</th>
   </tr>
   <tr>
    <td>Базовая поддержка</td>
    <td>{{CompatVersionUnknown}}</td>
    <td>{{CompatVersionUnknown}}</td>
    <td>{{CompatVersionUnknown}}</td>
    <td>{{CompatVersionUnknown}}</td>
    <td>{{CompatVersionUnknown}}</td>
   </tr>
  </tbody>
 </table>
</div>
<div id="compat-mobile">
 <table class="compat-table">
  <tbody>
   <tr>
    <th>Возможность</th>
    <th>Android</th>
    <th>Chrome для Android</th>
    <th>Firefox Mobile (Gecko)</th>
    <th>IE Mobile</th>
    <th>Opera Mobile</th>
    <th>Safari Mobile</th>
   </tr>
   <tr>
    <td>Базовая поддержка</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" name="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>