61 lines
2.1 KiB
Markdown
61 lines
2.1 KiB
Markdown
![]() |
---
|
|||
|
title: Reuse Patterns Using Capture Groups
|
|||
|
localeTitle: Повторное использование шаблонов с использованием групп захвата
|
|||
|
---
|
|||
|
## Повторное использование шаблонов с помощью группы захвата
|
|||
|
|
|||
|
## Подсказка 1:
|
|||
|
|
|||
|
Приведенный ниже код:
|
|||
|
|
|||
|
```javascript
|
|||
|
let testString = "test test test ";
|
|||
|
let reRegex =/(test)\s\1/;
|
|||
|
let result = reRegex.test(testString);
|
|||
|
```
|
|||
|
|
|||
|
`result` будет соответствовать только `test test` потому что `\1` в этом примере обозначает тот же текст, что и последний, сопоставленный первой группой захвата `(test)` .
|
|||
|
|
|||
|
Если бы мы должны были перевести регулярное выражение, это выглядело бы примерно так:
|
|||
|
|
|||
|
```js
|
|||
|
let re = /(test)\s\1;
|
|||
|
let literalRe = /test\stest;
|
|||
|
```
|
|||
|
|
|||
|
И `rea` и `literalRe` будут соответствовать одному и тому же.
|
|||
|
|
|||
|
## Подсказка 2:
|
|||
|
|
|||
|
Учитывая приведенный ниже код:
|
|||
|
|
|||
|
```javascript
|
|||
|
let testString = "test test test ";
|
|||
|
let reRegex =/(test)(\s)\1\2\1/;
|
|||
|
let result = reRegex.test(testString);
|
|||
|
```
|
|||
|
|
|||
|
будет соответствовать всем `test test test` потому что: `\1` повтор (тест) `\2` повторяет (\\ s)
|
|||
|
|
|||
|
## Подсказка 3:
|
|||
|
|
|||
|
Код ниже:
|
|||
|
|
|||
|
```javascript
|
|||
|
let testString = "test test test test test test";
|
|||
|
let reRegex =/(test)(\s)\1\2\1/g;
|
|||
|
let result = reRegex.test(testString);
|
|||
|
```
|
|||
|
|
|||
|
потому что мы использовали `\g` , наше Regex не возвращается после первого полного соответствия ( `test test test` ) и соответствует всем повторениям.
|
|||
|
|
|||
|
## Оповещение о спойлере - решение впереди!
|
|||
|
|
|||
|
## Решение:
|
|||
|
|
|||
|
```javascript
|
|||
|
let repeatNum = "42 42 42";
|
|||
|
let reRegex = /^(\d+)\s\1\s\1$/;
|
|||
|
let result = reRegex.test(repeatNum);
|
|||
|
|
|||
|
```
|