Skip to content

Commit 07fcbd8

Browse files
authored
Update article.md
1 parent 73590f9 commit 07fcbd8

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

9-regular-expressions/09-regexp-groups/article.md

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,17 +43,17 @@ let reg = /[-.\w]+@([\w-]+\.)+[\w-]{2,20}/g;
4343
alert("my@mail.com @ his@site.com.uk".match(reg)); // my@mail.com, his@site.com.uk
4444
```
4545

46-
В примере скобки используются для создания повторяющейся группы `pattern:(...)+`. Но есть и другие применения. Посмотрим на них.
46+
В этом примере скобки были использованы для создания повторяющейся группы `pattern:(...)+`. Но есть и другие применения. Посмотрим на них.
4747

4848
## Содержимое скобок
4949

50-
Группы скобок нумеруются слева направо. Поисковый движок запоминает содержимое в каждой группе и позволяет ссылаться на него в шаблоне регулярного выражения или строке для замены.
50+
Скобочные группы нумеруются слева направо. Поисковой движок запоминает содержимое, которое "поймала" каждая группа, и позволяет ссылаться на него в шаблоне регулярного выражения или строке для замены.
5151

5252
Например, мы хотим найти HTML теги `pattern:<.*?>` и обработать их.
5353

5454
Давайте заключим внутреннее содержимое в круглые скобки: `pattern:<(.*?)>`.
5555

56-
Соберём их в массив:
56+
Мы получим как тег целиком, так и его содержимое в виде массива:
5757

5858
```js run
5959
let str = '<h1>Hello, world!</h1>';
@@ -62,7 +62,7 @@ let reg = /<(.*?)>/;
6262
alert( str.match(reg) ); // Array: ["<h1>", "h1"]
6363
```
6464

65-
Вызов [String#match](mdn:js/String/match) возвращает группы, только если регулярное выражение не имеет флага `pattern:/.../g`.
65+
Вызов [String#match](mdn:js/String/match) возвращает группы, лишь если регулярное выражение ищет только первое совпадение, то есть не имеет флага `pattern:/.../g`.
6666

6767
Если необходимы все совпадения с их группировкой, то мы можем использовать `.matchAll` или `regexp.exec`, как описано в <info:regexp-methods>:
6868

@@ -126,7 +126,7 @@ alert( match[1] ); // undefined
126126
alert( match[2] ); // undefined
127127
```
128128

129-
Массив имеет длинну `3`, но все скобочные группы пустые.
129+
Массив имеет длину `3`, но все скобочные группы пустые.
130130

131131
А теперь более сложная ситуация для строки `subject:ack`:
132132

@@ -143,9 +143,11 @@ alert( match[2] ); // c
143143

144144
## Именованные группы
145145

146-
Запоминать группы по числам сложно. Для простых шаблонов это допустимо, но в более сложных случаях мы можем давать имена скобкам.
146+
Запоминать группы по номерам не очень удобно. Для простых шаблонов это допустимо, но в более сложных случаях мы можем давать скобкам имена.
147147

148-
Это делается добавлением `pattern:?<name>` непосредственно после открытия скобки. Например:
148+
Это делается добавлением `pattern:?<name>` непосредственно после открытия скобки.
149+
150+
Например:
149151

150152
```js run
151153
*!*
@@ -162,9 +164,9 @@ alert(groups.day); // 30
162164

163165
Как вы можете видеть, группы располагаются в свойстве `.groups` совпадения.
164166

165-
Мы также можем использовать их для замены, как `pattern:$<name>` (как в случае с `$1..9`, но использовать имя вместо цифры).
167+
Мы также можем использовать их в строке замены как `pattern:$<name>` (аналогично `$1..9`, но имя вместо цифры).
166168

167-
Например, давайте переделаем информацию о дате `day.month.year`:
169+
Например, давайте поменяем формат даты в `день.месяц.год`:
168170

169171
```js run
170172
let dateRegexp = /(?<year>[0-9]{4})-(?<month>[0-9]{2})-(?<day>[0-9]{2})/;
@@ -176,7 +178,7 @@ let rearranged = str.replace(dateRegexp, '$<day>.$<month>.$<year>');
176178
alert(rearranged); // 30.04.2019
177179
```
178180

179-
Если используем функцию, тогда именованный объект `groups` всегда является последним аргументом:
181+
Если используем функцию для замены, тогда именованный объект `groups` всегда является последним аргументом:
180182

181183
```js run
182184
let dateRegexp = /(?<year>[0-9]{4})-(?<month>[0-9]{2})-(?<day>[0-9]{2})/;
@@ -193,7 +195,7 @@ alert(rearranged); // 30.04.2019
193195

194196
Обычно, когда мы планируем использовать именованные группы, то из всех аргументов функции нам нужны только `str` и` groups`.
195197

196-
Таким образом, мы можем переписать код:
198+
Так что мы можем написать код чуть короче:
197199

198200
```js
199201
let rearranged = str.replace(dateRegexp, (str, ...args) => {

0 commit comments

Comments
 (0)