2018-10-12 16:35:31 -04:00
|
|
|
---
|
|
|
|
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
|
2018-12-12 15:48:22 -08:00
|
|
|
let re = /(test)\s\1/;
|
|
|
|
let literalRe = /test\stest/;
|
2018-10-12 16:35:31 -04:00
|
|
|
```
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
2018-12-12 15:48:22 -08:00
|
|
|
```
|