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-16 11:03:16 +05:30
Por vezes você procurará padrões que ocorrem várias vezes em uma string. Não faz sentido repetir a regex manualmente. Existe uma forma muito melhor de especificar quando a string possui múltiplas ocorrências do padrão buscado.
2021-06-15 00:49:18 -07:00
2021-07-16 11:03:16 +05:30
Você pode usar < dfn > grupos de captura</ dfn > para buscar substrings repetidas. Usamos parênteses (`(` e `)` ) para criar grupos de captura. Só precisamos escrever a regex do padrão que se repete dentro deles.
2021-06-15 00:49:18 -07:00
2021-07-16 11:03:16 +05:30
E, para especificar que a string capturada pelo grupo se repetirá, você escreve uma barra invertida (`\` ) seguida de um número. Esse número começa por 1 e aumenta em um para cada grupo de captura que você usa. Por exemplo, `\1` captura o primeiro grupo.
2021-06-15 00:49:18 -07:00
2021-07-16 11:03:16 +05:30
No exemplo abaixo, é capturada qualquer palavra que se repita depois de um espaço:
2021-06-15 00:49:18 -07:00
```js
let repeatStr = "regex regex";
let repeatRegex = /(\w+)\s\1/;
repeatRegex.test(repeatStr);
repeatStr.match(repeatRegex);
```
2021-07-16 11:03:16 +05:30
Nele, `test` retorna `true` e `match` retorna `["regex regex", "regex"]` .
2021-06-15 00:49:18 -07:00
2021-07-16 11:03:16 +05:30
O método `.match()` de uma string retorna um array com a string capturada e cada grupo capturado.
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-16 11:03:16 +05:30
Sua 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-16 11:03:16 +05:30
Sua 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-16 11:03:16 +05:30
Sua regex deve encontrar a string `42 42 42` .
2021-06-15 00:49:18 -07:00
```js
assert(reRegex.test('42 42 42'));
```
2021-07-16 11:03:16 +05:30
Sua regex deve encontrar a string `100 100 100` .
2021-06-15 00:49:18 -07:00
```js
assert(reRegex.test('100 100 100'));
```
2021-07-16 11:03:16 +05:30
Sua 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-16 11:03:16 +05:30
Sua 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-16 11:03:16 +05:30
Sua regex não deve encontrar a string `101 102 103` .
2021-06-15 00:49:18 -07:00
```js
assert(!reRegex.test('101 102 103'));
```
2021-07-16 11:03:16 +05:30
Sua regex não deve encontrar a string `1 2 3` .
2021-06-15 00:49:18 -07:00
```js
assert(!reRegex.test('1 2 3'));
```
2021-07-16 11:03:16 +05:30
Sua regex deve encontrar a string `10 10 10` .
2021-06-15 00:49:18 -07:00
```js
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);
```