Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions 9-regular-expressions/17-regexp-methods/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
let result = str.match(/Java(Script)/);

alert( result[0] ); // JavaScript (всё совпадение)
alert( result[1] ); // Script (первые скобки)
alert( result[1] ); // Script (первая скобочная группа)
alert( result.length ); // 2

// Дополнительная информация:
Expand Down Expand Up @@ -148,15 +148,15 @@ alert('12-34-56'.replace("-", ":")) // 12:34-56
alert( '12-34-56'.replace( *!*/-/g*/!*, ":" )) // 12:34:56
```

Второй аргумент - строка замены. Мы можем использовать специальные символы в нем:
Второй аргумент - строка замены. Мы можем использовать специальные символы в нём:

| Спецсимволы | Действие в строке замены |
|--------|--------|
|`$&`|вставляет всё найденное совпадение|
|<code>$&#096;</code>|вставляет часть строки до совпадения|
|`$'`|вставляет часть строки после совпадения|
|`$n`|если `n` это 1-2 значное число, то вставляет содержимое n-й скобки (см. главу [](info:regexp-groups))|
|`$<name>`|вставляет содержимое скобки с указанным `name` (см. главу [](info:regexp-groups))|
|`$n`|если `n` это 1-2 значное число, то вставляет содержимое n-й скобочной группы (см. главу [](info:regexp-groups))|
|`$<name>`|вставляет содержимое именованной группы с указанным `name` (см. главу [](info:regexp-groups))|
|`$$`|вставляет `"$"` |

Например:
Expand All @@ -175,12 +175,12 @@ alert(str.replace(/(\w+) (\w+)/i, '$2, $1')) // Smith, John
Функция вызывается с аргументами `func(match, p1, p2, ..., pn, offset, input, groups)`:

1. `match` -- найденное совпадение,
2. `p1, p2, ..., pn` -- содержимое скобок (см. главу [](info:regexp-groups)).
2. `p1, p2, ..., pn` -- содержимое скобочных групп (см. главу [](info:regexp-groups)).
3. `offset` -- позиция, на которой найдено совпадение,
4. `input` -- исходная строка,
5. `groups` -- объект с содержимым именованных скобок (см. главу [](info:regexp-groups)).
5. `groups` -- объект с именованными группами (см. главу [](info:regexp-groups)).

Если скобок в регулярном выражении нет, то будет только 3 аргумента: `func(match, offset, input)`.
Если скобочных групп в регулярном выражении нет, то будет только 3 аргумента: `func(match, offset, input)`.

Например, переведём выбранные совпадения в верхний регистр:

Expand All @@ -198,7 +198,7 @@ alert(result); // HTML and CSS
alert("Хо-Хо-хо".replace(/хо/gi, (match, offset) => offset)); // 0-3-6
```

В примере ниже две скобки, поэтому функция замены вызывается с 5-ю аргументами: первый - всё совпадение, затем два аргумента содержимое скобок, затем (в примере не используются) индекс совпадения и исходная строка:
В примере ниже две скобочные группы, поэтому функция замены вызывается с 5-ю аргументами: первый - всё совпадение, затем два аргумента содержимое скобочных групп, затем (в примере не используются) индекс совпадения и исходная строка:

```js run
let str = "John Smith";
Expand All @@ -208,7 +208,7 @@ let result = str.replace(/(\w+) (\w+)/, (match, name, surname) => `${surname}, $
alert(result); // Smith, John
```

Если в регулярном выражении много скобочных групп, то бывает удобно использовать остаточные аргументы для обращения к ним:
Если в регулярном выражении много скобочных групп, то бывает удобно использовать остаточные параметры для обращения к ним:

```js run
let str = "John Smith";
Expand Down Expand Up @@ -250,7 +250,7 @@ alert(result); // Smith, John

Таким образом, повторные вызовы возвращают одно за другим все совпадения, используя свойство `regexp.lastIndex` для отслеживания текущей позиции поиска.

В прошлом, до появления метода `str.matchAll` в JavaScript, вызов `regexp.exec` использовали для получения всех совпадений с их позициями и группами скобок в цикле:
В прошлом, до появления метода `str.matchAll` в JavaScript, вызов `regexp.exec` использовали для получения всех совпадений с их позициями и скобочными группами в цикле:

```js run
let str = 'Больше о JavaScript на https://javascript.info';
Expand All @@ -275,7 +275,7 @@ while (result = regexp.exec(str)) {
let str = 'Hello, world!';

let regexp = /\w+/g; // без флага g свойство lastIndex игнорируется
regexp.lastIndex = 5; // ищем с 5-й позиции (т.е с запятой и далее)
regexp.lastIndex = 5; // ищем с 5-й позиции (т.е. с запятой и далее)

alert( regexp.exec(str) ); // world
```
Expand Down