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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
|
---
title: RegExp.prototype.exec()
slug: Web/JavaScript/Reference/Global_Objects/RegExp/exec
translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/exec
---
<div>{{JSRef}}</div>
<p>Метод <strong><code>exec()</code></strong> виконує пошук збігів у заданому рядку. Він повертає масив або {{jsxref("null")}}.</p>
<p>Якщо Ви просто використовуєте регулярний вираз, щоб знайти чи є збіг чи немає використовуйте метод {{jsxref("RegExp.prototype.test()")}} або метод {{jsxref("String.prototype.search()")}}.</p>
<h2 id="Синтаксис">Синтаксис</h2>
<pre class="syntaxbox"><code><var>regexObj</var>.exec(<var>str</var>)</code></pre>
<h3 id="Параметри">Параметри</h3>
<dl>
<dt><code>str</code></dt>
<dd>Рядок який буде перевірятися на збіг за регулярним виразом.</dd>
</dl>
<h3 id="Що_повертає">Що повертає</h3>
<p>Якщо збіг є, метод <code>exec()</code> повертає масив і оновлює властивості об'єкту регулярного виразу. На першій позиції повернутого цим методом масиву буде підрядок який задовольняє даний регулярний вираз, на наступних позиціях запам'ятовані збіги за допомогою дужок "()"</p>
<p>Якщо збігів немає, метод <code>exec()</code> повертає {{jsxref("null")}}.</p>
<h2 id="Опис">Опис</h2>
<p>Розглянемо наступний приклад:</p>
<pre class="brush: js">// Знайти такий збіг: "Швидка руда" після чого йде
// довільна кількість знаків потім слово "стрибає"
// Запам'ятати "руда" і "стрибає"
// Ігнорувати регістр літер (знайде і руда і РуДа)
var re = /швидка\s(руда).+?(стрибає)/ig;
var result = re.exec('Швидка руда лисиця стрибає через ледачого пса');
</pre>
<p>Таблиця підсумовує результати виконання скрипта:</p>
<table class="fullwidth-table">
<tbody>
<tr>
<td class="header">Об'єкт</td>
<td class="header">Властивість / Індекс</td>
<td class="header">Пояснення</td>
<td class="header">Приклад</td>
</tr>
<tr>
<td rowspan="4"><code>result</code></td>
<td><code>[0]</code></td>
<td>Рядок символів що співпали.</td>
<td><code>Швидка руда лисиця стрибає</code></td>
</tr>
<tr>
<td><code>[1], ...[<em>n</em> ]</code></td>
<td>Запам'ятовані підрядки, якщо такі є. Їхня кількість не обмежена.</td>
<td><code>[1] = руда<br>
[2] = стрибає</code></td>
</tr>
<tr>
<td><code>index</code></td>
<td>Індекс з якого починається збіг.</td>
<td><font face="Consolas, Liberation Mono, Courier, monospace">0</font></td>
</tr>
<tr>
<td><code>input</code></td>
<td>Оригінальний рядок.</td>
<td><code>Швидка руда лисиця стрибає через ледачого пса</code></td>
</tr>
<tr>
<td rowspan="5"><code>re</code></td>
<td><code>lastIndex</code></td>
<td>
<p>Індекс з якого починати пошук наступного збігу. Коли прапорець "g" непоставлено, lastIndex буде залишатися 0.</p>
</td>
<td><code>26</code></td>
</tr>
<tr>
<td><code>ignoreCase</code></td>
<td>Показує чи був використаний прапорець "<code>i</code>" для ігнорування регістру літер.</td>
<td><code>true</code></td>
</tr>
<tr>
<td><code>global</code></td>
<td>Показує чи був використаний прапорець "<code>g</code>" для глобального пошуку.</td>
<td><code>true</code></td>
</tr>
<tr>
<td><code>multiline</code></td>
<td>Показує чи був використаний прапорець "<font face="Consolas, Liberation Mono, Courier, monospace">m</font>" для пошуку.</td>
<td><code>false</code></td>
</tr>
<tr>
<td><code>source</code></td>
<td>Сам регулярний вираз.</td>
<td>швидка\s(руда).+?(стрибає)</td>
</tr>
</tbody>
</table>
<h2 id="Приклади">Приклади</h2>
<h3 id="Пошук_наступних_збігів">Пошук наступних збігів</h3>
<p>Якщо регулярний вираз використовує прапорець "<code>g</code>", Ви можете використовувати метод <code>exec() багато разів для того, щоб знайти наступні збіги у рядку з яким працюєте.</code> Якщо Ви так зробите, пошук почнеться з індексу який заданий властивістю {{jsxref("RegExp.lastIndex", "lastIndex")}} ( метод {{jsxref("RegExp.prototype.test()", "test()")}} також змінює властивість {{jsxref("RegExp.lastIndex", "lastIndex")}} ). Для прикладу, припустимо Ви маєте такий скрипт:</p>
<pre class="brush: js">var myRe = /ab*/g;
var str = 'abbcdefabh';
var myArray;
while ((myArray = myRe.exec(str)) !== null) {
var msg = 'Знайдено ' + myArray[0] + '. ';
msg += 'Наступний пошук почнеться з індексу ' + myRe.lastIndex;
console.log(msg);
}
</pre>
<p>Це скрипт виведе таке:</p>
<pre>Знайдено abb. Наступний пошук почнеться з індексу 3
Знайдено ab. Наступний пошук почнеться з індексу 9
</pre>
<p>Увага: Не створюйте об'єкт (через конструктор {{jsxref("RegExp")}}) або літерал регулярного виразу в умові циклу <code>while</code> оскільки це призведе до нескінченного циклу оскільки властивість {{jsxref("RegExp.lastIndex", "lastIndex")}} буде перезаписуватися кожен раз на нуль і метод <code>exec </code>ніколи не поверне <font face="Consolas, Liberation Mono, Courier, monospace">null</font>. Також перевірте чи поставили прапорець "g" оскільки його відсутність також призведе до нескінченного циклу.</p>
<h3 id="Використання_exec()_RegExp_літералами">Використання <code>exec()</code> <code>RegExp</code> літералами</h3>
<p>Ви можете використовувати метод <code>exec()</code> без створення об'єкту {{jsxref("RegExp")}}:</p>
<pre class="brush: js">var matches = /(hello \S+)/.exec('This is a hello world!');
console.log(matches[1]);
</pre>
<p>Це виведе в консоль повідомлення 'hello world!'</p>
<h2 id="Специфікації">Специфікації</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">Специфікація</th>
<th scope="col">Статус</th>
<th scope="col">Примітка</th>
</tr>
<tr>
<td>{{SpecName('ES3')}}</td>
<td>{{Spec2('ES3')}}</td>
<td>Первісне значення. Реалізовано у JavaScript 1.2.</td>
</tr>
<tr>
<td>{{SpecName('ES5.1', '#sec-15.10.6.21', 'RegExp.exec')}}</td>
<td>{{Spec2('ES5.1')}}</td>
<td> </td>
</tr>
<tr>
<td>{{SpecName('ES6', '#sec-regexp.prototype.exec', 'RegExp.exec')}}</td>
<td>{{Spec2('ES6')}}</td>
<td> </td>
</tr>
<tr>
<td>{{SpecName('ESDraft', '#sec-regexp.prototype.exec', 'RegExp.exec')}}</td>
<td>{{Spec2('ESDraft')}}</td>
<td> </td>
</tr>
</tbody>
</table>
<h2 id="Сумісність_з_браузерами">Сумісність з браузерами</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 for 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="Див._також">Див. також</h2>
<ul>
<li><a href="/en-US/docs/Web/JavaScript/Guide/Regular_Expressions">Regular Expressions</a> розділ в <a href="/en-US/docs/Web/JavaScript/Guide">JavaScript Guide</a></li>
<li>{{jsxref("RegExp")}}</li>
</ul>
|