You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Без скобок, шаблон `pattern:/go+/` означает `subject:g` и, идущий после него,`subject:o`, который повторяется один или более раз. Например, `match:goooo` или `match:gooooooooo`.
18
+
Без скобок, шаблон `pattern:/go+/` означает символ `subject:g` и идущий после него символ`subject:o`, который повторяется один или более раз. Например, `match:goooo` или `match:gooooooooo`.
19
19
20
-
Скобки группирую символы в слово `pattern:(go)`.
20
+
Скобки группируют символы в слово `pattern:(go)`.
21
21
22
22
Сделаем что-то более сложное -- регулярное выражение, которое соответствует адресу электронной почты.
23
23
@@ -31,11 +31,11 @@ john.smith@site.com.uk
31
31
Шаблон: `pattern:[-.\w]+@([\w-]+\.)+[\w-]{2,20}`.
32
32
33
33
1. Первая часть `pattern:[-.\w]+` (перед `@`) может включать любые числовые или буквенные символы, точку и тире, чтобы соответствовать `match:john.smith`.
34
-
2. Затем идет`pattern:@` и домен. Это может быть поддомен (например, `host.site.com.uk`), поэтому мы сопоставляем его как слово, за которым следует точка `pattern:([\w-]+\.)` (повторяется). Затем в конце должно быть слово: `match:com` или `match:uk` (но не очень длинное: 2-20 символов).
34
+
2. Затем идёт`pattern:@` и домен. Это может быть поддомен (например, `host.site.com.uk`), поэтому мы сопоставляем его как слово, за которым следует точка `pattern:([\w-]+\.)` (повторяется). Затем в конце должно быть слово: `match:com` или `match:uk` (но не очень длинное: 2-20 символов).
35
35
36
-
Это выражение не идеально, но достаточно хорошее для исправления ошибок и опечаток.
36
+
Это выражение не идеальное, но достаточно хорошее для исправления ошибок и опечаток.
37
37
38
-
Например, мы можем найти все электронные адреса в строке:
38
+
Например, мы можем найти все электронные адреса в строке:
Группы скобок нумируются слева направо. Поисковый движок запоминает содержимое в каждой группе и позволяет ссылаться на него в шаблоне регулярного выражения или строке для замены.
50
+
Группы скобок нумеруются слева направо. Поисковый движок запоминает содержимое в каждой группе и позволяет ссылаться на него в шаблоне регулярного выражения или строке для замены.
51
51
52
-
Например, мы хотим найти HTML теги `pattern:<.*?>` и обрадотать их.
52
+
Например, мы хотим найти HTML теги `pattern:<.*?>` и обработать их.
53
53
54
54
Давайте заключим внутреннее содержимое в круглые скобки: `pattern:<(.*?)>`.
55
55
56
-
Соберем их в массив:
56
+
Соберём их в массив:
57
57
58
58
```js run
59
59
let str ='<h1>Hello, world!</h1>';
@@ -62,9 +62,9 @@ let reg = /<(.*?)>/;
62
62
alert( str.match(reg) ); // Array: ["<h1>", "h1"]
63
63
```
64
64
65
-
Вызов [String#match](mdn:js/String/match) возвращает группы только если регулярное выражение не имеет флаг`pattern:/.../g`.
65
+
Вызов [String#match](mdn:js/String/match) возвращает группы, только если регулярное выражение не имеет флага`pattern:/.../g`.
66
66
67
-
Если необходимы все совпадения с их группировкой, то мы можем использовать `.matchAll` или `regexp.exec` как описано в <info:regexp-methods>:
67
+
Если необходимы все совпадения с их группировкой, то мы можем использовать `.matchAll` или `regexp.exec`, как описано в <info:regexp-methods>:
С нулевым индексом `result` всегда идет совпадение полностью.
108
+
По нулевому индексу в `result` всегда идёт полное совпадение.
109
109
110
-
Затем группы, нумеруемые слева направо. Та, которая открывается первой, получает первую группу `result[1]`. Она заключает в себе все содержимое тега.
110
+
Затем следуют группы, нумеруемые слева направо. Группа, которая идёт первой, получает первый индекс в результате -- `result[1]`. Там находится всё содержимое тега.
111
111
112
-
Затем в `result[2]`идет группа от второй открывающей скобки `pattern:(` до соответствующей `pattern:)` -- имя тега, тогда мы группируем не пространства, а группу аттрибутов для `result[3]`.
112
+
Затем в `result[2]`идёт группа, образованная второй открывающей скобкой `pattern:(` до следующей закрывающей скобки `pattern:)` -- имя тега, далее в `result[3]`мы группируем не пробелы, а атрибуты.
113
113
114
114
**Даже если скобочная группа необязательна и не входит в совпадение, соответствующий элемент массива `result` существует (и равен `undefined`).**
115
115
116
-
Например, рассмотрим регэксп `pattern:a(z)?(c)?`. Он ищет `"a"`, за которой не обязательно идёт буква `"z"`, за которой не обязательно идёт буква `"c"`.
116
+
Например, рассмотрим регулярное выражение `pattern:a(z)?(c)?`. Оно ищет букву `"a"`, за которой опционально идёт буква `"z"`, за которой, в свою очередь, опционально идёт буква `"c"`.
117
117
118
-
Если запустить его на строку из одной буквы `subject:a`, то результат будет таков:
118
+
Если применить его к строке из одной буквы `subject:a`, то результат будет такой:
119
119
120
120
```js run
121
121
let match ='a'.match(/a(z)?(c)?/);
@@ -139,11 +139,11 @@ alert( match[1] ); // undefined, потому что для (z)? ничего н
139
139
alert( match[2] ); // c
140
140
```
141
141
142
-
Длинна массива всегда:`3`. Для группы `pattern:(z)?` ничего нет, поэтому результат `["ac", undefined, "c"]`.
142
+
Длинна массива всегда равна`3`. Для группы `pattern:(z)?` ничего нет, поэтому результат `["ac", undefined, "c"]`.
143
143
144
144
## Именованные группы
145
145
146
-
Запоминать группы по числам сложно. Для простых шаблонов это допустимо, но в более сложных случаях мы можем дать имена скобкам.
146
+
Запоминать группы по числам сложно. Для простых шаблонов это допустимо, но в более сложных случаях мы можем давать имена скобкам.
147
147
148
148
Это делается добавлением `pattern:?<name>` непосредственно после открытия скобки. Например:
149
149
@@ -162,7 +162,7 @@ alert(groups.day); // 30
162
162
163
163
Как вы можете видеть, группы располагаются в свойстве `.groups` совпадения.
164
164
165
-
МЫ также можем использовать их для замены, как `pattern:$<name>` (как в случае с `$1..9`, но использовать имя вместо цифры).
165
+
Мы также можем использовать их для замены, как `pattern:$<name>` (как в случае с `$1..9`, но использовать имя вместо цифры).
166
166
167
167
Например, давайте переделаем информацию о дате `day.month.year`:
168
168
@@ -191,9 +191,9 @@ let rearranged = str.replace(dateRegexp,
191
191
alert(rearranged); // 30.04.2019
192
192
```
193
193
194
-
Обычно, когдам мы планируем использовать именованные группы, то нам не нужны позиционированные аргументы функции. Для большинства реальных случаев нам нужны только `str` и` groups`.
194
+
Обычно, когда мы планируем использовать именованные группы, то из всех аргументов функции нам нужны только `str` и` groups`.
195
195
196
-
Таким образом, мы можем написать это немного короче:
196
+
Таким образом, мы можем переписать код:
197
197
198
198
```js
199
199
let rearranged =str.replace(dateRegexp, (str, ...args) => {
Бывает так, что скобки нужны, чтобы квантификатор правильно применился, но мы не хотимсодержимое в результате.
211
+
Бывает так, что скобки нужны, чтобы квантификатор правильно применился, но мы не хотим, чтобы их содержимое попало в результат.
212
212
213
213
Скобочную группу можно исключить из запоминаемых и нумеруемых, добавив в её начало `pattern:?:`.
214
214
215
215
Например, если мы хотим найти `pattern:(go)+`, но не хотим запоминать содержимое (`go`) в отдельный элемент массива, то можем написать так: `pattern:(?:go)+`.
216
216
217
-
В примере ниже мы получаем только имя "John", как отдельный член массива `results`:
217
+
В примере ниже мы получаем только имя "John" как отдельный член массива `results`:
218
218
219
219
```js run
220
220
let str ="Gogo John!";
@@ -234,4 +234,4 @@ alert( result[1] ); // John
234
234
- Скобки могут:
235
235
- запоминать `(...)`, нумеровать слева направо, давать доступ по номеру.
236
236
- именовать группы `(?<name>...)`, давать доступ по имени.
237
-
- исключать из запоминания `(?:...)`, использоваться только для применения квантификатора ко всем группам.
237
+
- исключать из запоминания `(?:...)`, использоваться только для применения квантификатора ко всей группе символов.
0 commit comments