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
**Даже если скобочная группа необязательна и не входит в совпадение, соответствующий элемент массива `result` существует (и равен `undefined`).**
115
115
116
-
For instance, let's consider the regexp `pattern:a(z)?(c)?`. It looks for `"a"` optionally followed by `"z"` optionally followed by`"c"`.
116
+
Например, рассмотрим регэксп `pattern:a(z)?(c)?`. Он ищет `"a"`, за которой не обязательно идёт буква `"z"`, за которой не обязательно идёт буква`"c"`.
117
117
118
-
If we run it on the string with a single letter `subject:a`, then the result is:
118
+
Если запустить его на строку из одной буквы `subject:a`, то результат будет таков:
119
119
120
120
```js run
121
121
let match ='a'.match(/a(z)?(c)?/);
122
122
123
123
alert( match.length ); // 3
124
-
alert( match[0] ); // a (whole match)
124
+
alert( match[0] ); // a (всё совпадение)
125
125
alert( match[1] ); // undefined
126
126
alert( match[2] ); // undefined
127
127
```
128
128
129
-
The array has the length of `3`, but all groups are empty.
129
+
Массив имеет длинну `3`, но все скобочные группы пустые.
130
130
131
-
And here's a more complex match for the string`subject:ack`:
131
+
А теперь более сложная ситуация для строки`subject:ack`:
132
132
133
133
```js run
134
134
let match ='ack'.match(/a(z)?(c)?/)
135
135
136
136
alert( match.length ); // 3
137
-
alert( match[0] ); // ac (whole match)
138
-
alert( match[1] ); // undefined, because there's nothing for (z)?
137
+
alert( match[0] ); // ac (всё совпадение)
138
+
alert( match[1] ); // undefined, потому что для (z)? ничего нет
139
139
alert( match[2] ); // c
140
140
```
141
141
142
-
The array length is permanent: `3`. But there's nothing for the group `pattern:(z)?`, so the result is`["ac", undefined, "c"]`.
142
+
Длинна массива всегда: `3`. Для группы `pattern:(z)?` ничего нет, поэтому результат`["ac", undefined, "c"]`.
143
143
144
-
## Named groups
144
+
## Именованные группы
145
145
146
-
Remembering groups by their numbers is hard. For simple patterns it's doable, but for more complex ones we can give names to parentheses.
146
+
Запоминать группы по числам сложно. Для простых шаблонов это допустимо, но в более сложных случаях мы можем дать имена скобкам.
147
147
148
-
That's done by putting `pattern:?<name>`immediately after the opening paren, like this:
148
+
Это делается добавлением `pattern:?<name>`непосредственно после открытия скобки. Например:
149
149
150
150
```js run
151
151
*!*
@@ -160,11 +160,11 @@ alert(groups.month); // 04
160
160
alert(groups.day); // 30
161
161
```
162
162
163
-
As you can see, the groups reside in the`.groups`property of the match.
163
+
Как вы можете видеть, группы располагаются в свойстве `.groups`совпадения.
164
164
165
-
We can also use them in replacements, as`pattern:$<name>` (like `$1..9`, but name instead of a digit).
165
+
МЫ также можем использовать их для замены, как`pattern:$<name>` (как в случае с `$1..9`, но использовать имя вместо цифры).
166
166
167
-
For instance, let's rearrange the date into`day.month.year`:
167
+
Например, давайте переделаем информацию о дате`day.month.year`:
168
168
169
169
```js run
170
170
let dateRegexp =/(?<year>[0-9]{4})-(?<month>[0-9]{2})-(?<day>[0-9]{2})/;
@@ -176,7 +176,7 @@ let rearranged = str.replace(dateRegexp, '$<day>.$<month>.$<year>');
176
176
alert(rearranged); // 30.04.2019
177
177
```
178
178
179
-
If we use a function, then named `groups`object is always the last argument:
179
+
Если используем функцию, тогда именованный объект `groups`всегда является последним аргументом:
180
180
181
181
```js run
182
182
let dateRegexp =/(?<year>[0-9]{4})-(?<month>[0-9]{2})-(?<day>[0-9]{2})/;
@@ -191,9 +191,9 @@ let rearranged = str.replace(dateRegexp,
191
191
alert(rearranged); // 30.04.2019
192
192
```
193
193
194
-
Usually, when we intend to use named groups, we don't need positional arguments of the function. For the majority of real-life cases we only need `str`and `groups`.
194
+
Обычно, когдам мы планируем использовать именованные группы, то нам не нужны позиционированные аргументы функции. Для большинства реальных случаев нам нужны только `str`и`groups`.
195
195
196
-
So we can write it a little bit shorter:
196
+
Таким образом, мы можем написать это немного короче:
197
197
198
198
```js
199
199
let rearranged =str.replace(dateRegexp, (str, ...args) => {
Sometimes we need parentheses to correctly apply a quantifier, but we don't want the contents in results.
211
+
Бывает так, что скобки нужны, чтобы квантификатор правильно применился, но мы не хотим содержимое в результате.
212
212
213
-
A group may be excluded by adding `pattern:?:` in the beginning.
213
+
Скобочную группу можно исключить из запоминаемых и нумеруемых, добавив в её начало `pattern:?:`.
214
214
215
-
For instance, if we want to find `pattern:(go)+`, but don't want to remember the contents (`go`) in a separate array item, we can write: `pattern:(?:go)+`.
215
+
Например, если мы хотим найти `pattern:(go)+`, но не хотим запоминать содержимое (`go`) в отдельный элемент массива, то можем написать так: `pattern:(?:go)+`.
216
216
217
-
In the example below we only get the name "John" as a separate member of the `results` array:
217
+
В примере ниже мы получаем только имя "John", как отдельный член массива `results`:
218
218
219
219
```js run
220
220
let str ="Gogo John!";
221
221
*!*
222
-
//exclude Gogo from capturing
222
+
//исключает Gogo из запоминания
223
223
let reg =/(?:go)+ (\w+)/i;
224
224
*/!*
225
225
@@ -229,9 +229,9 @@ alert( result.length ); // 2
229
229
alert( result[1] ); // John
230
230
```
231
231
232
-
## Summary
232
+
## Итого
233
233
234
-
-Parentheses can be:
235
-
-capturing`(...)`, ordered left-to-right, accessible by number.
236
-
-named capturing`(?<name>...)`, accessible by name.
237
-
-non-capturing `(?:...)`, used only to apply quantifier to the whole groups.
234
+
-Скобки могут:
235
+
-запоминать`(...)`, нумеровать слева направо, давать доступ по номеру.
236
+
-именовать группы`(?<name>...)`, давать доступ по имени.
237
+
-исключать из запоминания `(?:...)`, использоваться только для применения квантификатора ко всем группам.
0 commit comments