aboutsummaryrefslogtreecommitdiff
path: root/files/uk/web/javascript/reference/global_objects/string/match/index.html
blob: dfc6bf5f6b6cfc20b0521fc97bbd302b434e5955 (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
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
---
title: String.prototype.match()
slug: Web/JavaScript/Reference/Global_Objects/String/match
tags:
  - JavaScript
  - Method
  - Prototype
  - String
  - Довідка
  - Регулярний вираз
  - метод
translation_of: Web/JavaScript/Reference/Global_Objects/String/match
---
<div>{{JSRef}}</div>

<p>Метод <strong><code>match()</code></strong> шукає та повертає (якщо є) збіги <em>рядка</em> із зазначеним <a href="/uk/docs/Web/JavaScript/Guide/Regular_Expressions">регулярним виразом</a>.</p>

<p>{{EmbedInteractiveExample("pages/js/string-match.html", "shorter")}}</p>

<div class="hidden">
<p>The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
</div>

<h2 id="Синтаксис">Синтаксис</h2>

<pre class="syntaxbox"><var>str</var>.match(<var>regexp</var>)</pre>

<h3 id="Параметри">Параметри</h3>

<dl>
 <dt><code>regexp</code></dt>
 <dd>Об'єкт регулярного виразу.</dd>
 <dd>Якщо передати значення іншого типу, воно буде неявно перетворене на {{jsxref("RegExp")}} за допомогою оператора <code>new RegExp(<em>regexp</em>).</code></dd>
 <dd>Якщо жодного параметра не вказано, метод поверне {{jsxref("Array","масив")}} з одним елементом — порожнім рядком: <code>[""]</code>.</dd>
</dl>

<h3 id="Вертає">Вертає</h3>

<p>{{jsxref("Array","Масив")}}, чий вміст залежить від наявності чи відсутності глобального (<code>g</code>) прапора, або {{jsxref("null")}}, якщо жодних збігів не знайдено.</p>

<ul>
 <li>Якщо використовується прапор <code>g</code>, метод поверне усі результати, що збігаються з повним регулярним виразом, але не поверне захоплені групи.</li>
 <li>Якщо прапор <code>g</code> не використовується, метод поверне лише перший повний збіг та захоплені групи, які він містить. У цьому випадку повернений елемент матиме додаткові властивості, описані нижче.</li>
</ul>

<h4 id="Додаткові_властивості">Додаткові властивості</h4>

<p>Як пояснювалось вище, деякі результати містять наступні додаткові властивості:</p>

<dl>
 <dt><code>groups</code></dt>
 <dd>Масив іменованих захоплених груп або {{jsxref("undefined")}}, якщо іменовані групи не були визначені. Дивіться <a href="/uk/docs/Web/JavaScript/Guide/Regular_Expressions/Groups_and_Ranges">Групи та діапазони</a>, щоб дізнатись більше.</dd>
 <dt><code>index</code></dt>
 <dd>Індекс пошуку, за яким був знайдений результат.</dd>
 <dt><code>input</code> </dt>
 <dd>Копія рядка, в якому здійснювався пошук.</dd>
</dl>

<h2 id="Опис">Опис</h2>

<p>Якщо регулярний вираз не позначено прапорцем <code>g</code>, виклик <code>str.match()</code> повертає такий самий результат, що й {{jsxref("RegExp.prototype.exec()", "RegExp.exec()")}}.</p>

<h3 id="Інші_методи">Інші методи</h3>

<ul>
 <li>Якщо вам треба з'ясувати, чи відповідає рядок регулярному виразові {{jsxref("RegExp")}}, скористайтеся методом {{jsxref("RegExp.prototype.test()", "RegExp.test()")}}.</li>
 <li>Якщо вас цікавить лише перший збіг, можете натомість використати {{jsxref("RegExp.prototype.exec()", "RegExp.exec()")}}.</li>
 <li>Якщо ви хочете отримати захоплені групи, а прапорець <code>g</code> встановлено, вам потрібен метод {{jsxref("RegExp.prototype.exec()", "RegExp.exec()")}} або {{jsxref("String.prototype.matchAll()")}}.</li>
</ul>

<h2 id="Приклади">Приклади</h2>

<h3 id="Використання_match">Використання <code>match()</code></h3>

<p>У прикладі нижче метод <code>match()</code> задіяно, щоб знайти слово <code>«розділ»</code>, за ним одну чи кілька цифр, далі десяткова крапка та 0 чи більше числових символів.</p>

<p>Регулярний вираз позначено прапорцем <code>i</code>, що означає відсутність розрізнювання великих та малих літер.</p>

<pre class="brush: js">var str = 'Докладніше див. розділ 3.4.5.1';
var re = /див\. (розділ \d+(\.\d)*)/i;
var found = str.match(re);

console.log(found);

// Виводить:
// [
//   0: "див. розділ 3.4.5.1"
//   1: "розділ 3.4.5.1"
//   2: ".1"
//   index: 11
//   input: "Докладніше див. розділ 3.4.5.1"
// ]

// Рядок "див. розділ 3.4.5.1" є повним збігом.
// Рядок "розділ 3.4.5.1" — це підрядок, захоплений підвиразом '(розділ \d+(\.\d)*)'
// Рядок ".1" — це останній підрядок, захоплений підвиразом '(\.\d)'
// Властивість 'index' (11) — це зсув підрядка, що відповідає регулярному виразові
// Властивість 'input' — це повна копія досліджуваного рядка str
</pre>

<h3 id="Вживання_прапорців_i_та_g_із_методом_match">Вживання прапорців <code>i</code> та <code>g</code> із методом <code>match()</code></h3>

<p>Приклад нижче засвідчує дію прапорців <code>i</code> (ignore case — регістронезалежний режим) та <code>g</code> (global — пошук усіх збігів, а не тільки першого) при використанні метода <code>match()</code>. Будуть повернені усі літери від <code>A</code> до <code>E</code> та від <code>a</code> до <code>e</code>, кожна як окремий елемент масиву.</p>

<pre class="brush: js">var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
var regexp = /[A-E]/gi;
var matches_array = str.match(regexp);

console.log(matches_array);
// ['A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e']
</pre>

<div class="blockIndicator note">
<p><strong>Заувага:</strong> Дивіться також метод {{jsxref("String.prototype.matchAll()")}} та <a href="https://wiki.developer.mozilla.org/uk/docs/Web/JavaScript/Reference/Global_Objects/String/g/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#Advanced_searching_with_flags">Складний пошук за допомогою прапорів</a>.</p>
</div>

<h3 id="Використання_іменованих_груп">Використання іменованих груп</h3>

<p>У переглядачах, які підтримують іменовані захоплені групи, наступний код захопить <code>"їжак"</code> чи <code>"кіт"</code> у групу на ім'я <code>"тварина"</code>:</p>

<pre class="brush: js">let paragraph = 'Єхидна, ґава, їжак ще й шиплячі плазуни бігцем форсують Янцзи.';

let capturingRegex = /(?&lt;тварина&gt;їжак|кіт) ще й/;
found = paragraph.match(capturingRegex);
console.log(found.groups); // {тварина: "їжак"}</pre>

<h3 id="Використання_match_без_параметрів">Використання <code>match()</code> без параметрів</h3>

<pre class="brush: js">var str = "Я — Дух одвічної стихії";

// вертає ["", index: 0, input: "Я — Дух одвічної стихії"]
str.match();</pre>

<h3 id="Параметр_відмінного_від_RegExp_типу">Параметр відмінного від <code>RegExp</code> типу</h3>

<p>Якщо переданий параметр являє собою рядок або число, його буде перетворено на об'єкт {{jsxref("RegExp")}} шляхом неявного виклику <code>new RegExp(obj)</code>.</p>

<p>Якщо це додатнє число, його знаком <code>+</code> буде знехтувано, проте для від'ємного числа знак <code>-</code> стане частиною регулярного виразу:</p>

<pre class="brush: js">var str1 = "NaN означає «не число». Нескінченність у JavaScript має дві форми: -Infinity та +Infinity.",
    str2 = "Моїй бабці 65 років, а дідусеві — 63.",
    str3 = "Незмінна величина null позначає відсутність очікуваного значення.";

str1.match("число");    // "число" є рядком; вертає ["число"]
str1.match(NaN);        // величина NaN є числом; вертає ["NaN"]
str1.match(Infinity);   // величина Infinity також є числом; вертає ["Infinity"]
str1.match(+Infinity);  // вертає ["Infinity"]
str1.match(-Infinity);  // вертає ["-Infinity"]
str2.match(65);         // вертає ["65"]
str2.match(+65);        // додатнє число; вертає ["65"]
str3.match(null);       // вертає ["null"]</pre>

<h2 id="Специфікації">Специфікації</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Специфікація</th>
  </tr>
  <tr>
   <td>{{SpecName('ESDraft', '#sec-string.prototype.match', 'String.prototype.match')}}</td>
  </tr>
 </tbody>
</table>

<h2 id="Підтримка_веб-переглядачами">Підтримка веб-переглядачами</h2>

<h3 id="Базова_підтримка_методу_match">Базова підтримка методу <samp>match()</samp></h3>

<div class="hidden">
<p>Таблиця сумісності на цій сторінці створена зі структурованих даних. Якщо ви хочете долучитися до розробки цих даних, пропонуйте нам свої pull request до репозиторію <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a>.</p>
</div>

<p>{{Compat("javascript.builtins.String.match")}}</p>

<h3 id="Підтримка_іменованих_груп">Підтримка іменованих груп</h3>

<p>{{Compat("javascript.builtins.RegExp.named_capture_groups")}}</p>

<h2 id="Зауваги_щодо_Firefox">Зауваги щодо Firefox</h2>

<ul>
 <li>Аргумент <code>flags</code> був нестандартним другим аргументом, доступним лише у Firefox: <code><var>str</var>.match(<var>regexp, flags</var>)</code>. Він був прибраний, починаючи з Firefox 49.</li>
 <li>У Firefox 27 цей метод було узгоджено зі специфікацією ECMAScript. Коли <code>match()</code> викликано із глобальним регулярним виразом, властивість {{jsxref("RegExp.lastIndex")}} (якщо зазначено) скидається до <code>0</code> (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=501739">bug 501739</a>).</li>
</ul>

<h2 id="Див._також">Див. також</h2>

<ul>
 <li>{{jsxref("String.prototype.matchAll()")}}</li>
 <li>{{jsxref("RegExp")}}</li>
 <li>{{jsxref("RegExp.prototype.exec()")}}</li>
 <li>{{jsxref("RegExp.prototype.test()")}}</li>
</ul>