61 lines
1.4 KiB
Markdown
61 lines
1.4 KiB
Markdown
|
---
|
||
|
title: Reuse Patterns Using Capture Groups
|
||
|
localeTitle: Reutilizar padrões usando grupos de captura
|
||
|
---
|
||
|
## Reutilizar padrões usando o grupo de captura
|
||
|
|
||
|
## Sugestão 1:
|
||
|
|
||
|
Dado código abaixo:
|
||
|
|
||
|
```javascript
|
||
|
let testString = "test test test ";
|
||
|
let reRegex =/(test)\s\1/;
|
||
|
let result = reRegex.test(testString);
|
||
|
```
|
||
|
|
||
|
`result` no `test test` porque `\1` neste exemplo representa o mesmo texto que o mais recente correspondido pelo primeiro grupo de captura `(test)` .
|
||
|
|
||
|
Se fôssemos traduzir literalmente o regex, seria algo como isto:
|
||
|
|
||
|
```js
|
||
|
let re = /(test)\s\1;
|
||
|
let literalRe = /test\stest;
|
||
|
```
|
||
|
|
||
|
Ambos `rea` e `literalRe` combinariam com a mesma coisa.
|
||
|
|
||
|
## Dica 2:
|
||
|
|
||
|
Dado o código abaixo:
|
||
|
|
||
|
```javascript
|
||
|
let testString = "test test test ";
|
||
|
let reRegex =/(test)(\s)\1\2\1/;
|
||
|
let result = reRegex.test(testString);
|
||
|
```
|
||
|
|
||
|
irá coincidir com o `test test test` inteiro porque: `\1` repetições (teste) `\2` repetições (\\ s)
|
||
|
|
||
|
## Dica 3:
|
||
|
|
||
|
O código abaixo:
|
||
|
|
||
|
```javascript
|
||
|
let testString = "test test test test test test";
|
||
|
let reRegex =/(test)(\s)\1\2\1/g;
|
||
|
let result = reRegex.test(testString);
|
||
|
```
|
||
|
|
||
|
porque usamos `\g` , nosso Regex não retorna após a primeira correspondência completa ( `test test test` ) e corresponde a todas as repetições.
|
||
|
|
||
|
## Alerta de Spoiler - Solução à frente!
|
||
|
|
||
|
## Solução:
|
||
|
|
||
|
```javascript
|
||
|
let repeatNum = "42 42 42";
|
||
|
let reRegex = /^(\d+)\s\1\s\1$/;
|
||
|
let result = reRegex.test(repeatNum);
|
||
|
|
||
|
```
|