2021-06-15 00:49:18 -07:00
---
id: 587d7dbb367417b2b2512baa
2021-07-21 20:53:20 +05:30
title: Reusar padrões com grupos de captura
2021-06-15 00:49:18 -07:00
challengeType: 1
forumTopicId: 301364
dashedName: reuse-patterns-using-capture-groups
---
# --description--
2021-07-26 03:17:00 +09:00
Vamos supor que você deseja encontrar a correspondência de uma palavra que ocorra várias vezes como abaixo.
2021-06-15 00:49:18 -07:00
2021-07-26 03:17:00 +09:00
```js
let repeatStr = "row row row your boat";
```
Você poderia usar `/row row row/` , mas e se você não souber a palavra específica repetida? < dfn > Grupos de captura</ dfn > podem ser usados para localizar substrings repetidas.
Os grupos de captura são criados envolvendo o padrão de regex a ser capturado entre parênteses. Neste caso, o objetivo é capturar uma palavra composta de caracteres alfanuméricos para que o grupo de captura seja `\w+` entre parênteses: `/(\w+)/` .
2021-06-15 00:49:18 -07:00
2021-07-26 03:17:00 +09:00
A substring correspondente ao grupo é salva em uma "variável" temporária que pode ser acessada dentro da mesma expressão regular usando uma barra invertida e o número do grupo de captura (ex.: `\1` ). Os grupos de captura são automaticamente numerados pela posição de abertura de seus parênteses (esquerda para direita), começando em 1.
2021-06-15 00:49:18 -07:00
2021-07-26 03:17:00 +09:00
O exemplo abaixo captura qualquer palavra que se repita três vezes, separada por espaços:
2021-06-15 00:49:18 -07:00
```js
2021-07-26 03:17:00 +09:00
let repeatRegex = /(\w+) \1 \1/;
repeatRegex.test(repeatStr); // Returns true
repeatStr.match(repeatRegex); // Returns ["row row row", "row"]
2021-06-15 00:49:18 -07:00
```
2021-07-26 03:17:00 +09:00
Usar o método `.match()` em uma string retornará um array com a substring correspondente, juntamente com seus grupos capturados.
2021-06-15 00:49:18 -07:00
# --instructions--
2021-07-16 11:03:16 +05:30
Use grupos de captura na regex `reRegex` para capturar em uma string um número que aparece exatamente três vezes, separados por espaços.
2021-06-15 00:49:18 -07:00
# --hints--
2021-07-30 23:57:21 +09:00
A regex deve usar o atalho de classe de caracteres para dígitos.
2021-06-15 00:49:18 -07:00
```js
assert(reRegex.source.match(/\\d/));
```
2021-07-30 23:57:21 +09:00
A regex deve reusar um grupo de captura duas vezes.
2021-06-15 00:49:18 -07:00
```js
assert(reRegex.source.match(/\\1|\\2/g).length >= 2);
```
2021-07-30 23:57:21 +09:00
A regex deve encontrar a string `42 42 42` .
2021-06-15 00:49:18 -07:00
```js
2021-10-06 08:36:48 -07:00
reRegex.lastIndex = 0;
2021-06-15 00:49:18 -07:00
assert(reRegex.test('42 42 42'));
```
2021-07-30 23:57:21 +09:00
A regex deve encontrar a string `100 100 100` .
2021-06-15 00:49:18 -07:00
```js
2021-10-06 08:36:48 -07:00
reRegex.lastIndex = 0;
2021-06-15 00:49:18 -07:00
assert(reRegex.test('100 100 100'));
```
2021-07-30 23:57:21 +09:00
A regex não deve encontrar a string `42 42 42 42` .
2021-06-15 00:49:18 -07:00
```js
assert.equal('42 42 42 42'.match(reRegex.source), null);
```
2021-07-30 23:57:21 +09:00
A regex não deve encontrar a string `42 42` .
2021-06-15 00:49:18 -07:00
```js
assert.equal('42 42'.match(reRegex.source), null);
```
2021-07-30 23:57:21 +09:00
A regex não deve encontrar a string `101 102 103` .
2021-06-15 00:49:18 -07:00
```js
2021-10-06 08:36:48 -07:00
reRegex.lastIndex = 0;
2021-06-15 00:49:18 -07:00
assert(!reRegex.test('101 102 103'));
```
2021-07-30 23:57:21 +09:00
A regex não deve encontrar a string `1 2 3` .
2021-06-15 00:49:18 -07:00
```js
2021-10-06 08:36:48 -07:00
reRegex.lastIndex = 0;
2021-06-15 00:49:18 -07:00
assert(!reRegex.test('1 2 3'));
```
2021-07-30 23:57:21 +09:00
A regex deve encontrar a string `10 10 10` .
2021-06-15 00:49:18 -07:00
```js
2021-10-06 08:36:48 -07:00
reRegex.lastIndex = 0;
2021-06-15 00:49:18 -07:00
assert(reRegex.test('10 10 10'));
```
# --seed--
## --seed-contents--
```js
let repeatNum = "42 42 42";
let reRegex = /change/; // Change this line
let result = reRegex.test(repeatNum);
```
# --solutions--
```js
let repeatNum = "42 42 42";
let reRegex = /^(\d+)\s\1\s\1$/;
let result = reRegex.test(repeatNum);
```