Files
freeCodeCamp/curriculum/challenges/portuguese/02-javascript-algorithms-and-data-structures/regular-expressions/reuse-patterns-using-capture-groups.md

2.6 KiB

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
587d7dbb367417b2b2512baa Reusando Padrões com Grupos de Captura 1 301364 reuse-patterns-using-capture-groups

--description--

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.

Você pode usar grupos de captura 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.

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.

No exemplo abaixo, é capturada qualquer palavra que se repita depois de um espaço:

let repeatStr = "regex regex";
let repeatRegex = /(\w+)\s\1/;
repeatRegex.test(repeatStr);
repeatStr.match(repeatRegex);

Nele, test retorna true e match retorna ["regex regex", "regex"].

O método .match() de uma string retorna um array com a string capturada e cada grupo capturado.

--instructions--

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.

--hints--

Sua regex deve usar o atalho de classe de caracteres para dígitos.

assert(reRegex.source.match(/\\d/));

Sua regex deve reusar um grupo de captura duas vezes.

assert(reRegex.source.match(/\\1|\\2/g).length >= 2);

Sua regex deve encontrar a string 42 42 42.

assert(reRegex.test('42 42 42'));

Sua regex deve encontrar a string 100 100 100.

assert(reRegex.test('100 100 100'));

Sua regex não deve encontrar a string 42 42 42 42.

assert.equal('42 42 42 42'.match(reRegex.source), null);

Sua regex não deve encontrar a string 42 42.

assert.equal('42 42'.match(reRegex.source), null);

Sua regex não deve encontrar a string 101 102 103.

assert(!reRegex.test('101 102 103'));

Sua regex não deve encontrar a string 1 2 3.

assert(!reRegex.test('1 2 3'));

Sua regex deve encontrar a string 10 10 10.

assert(reRegex.test('10 10 10'));

--seed--

--seed-contents--

let repeatNum = "42 42 42";
let reRegex = /change/; // Change this line
let result = reRegex.test(repeatNum);

--solutions--

let repeatNum = "42 42 42";
let reRegex = /^(\d+)\s\1\s\1$/;
let result = reRegex.test(repeatNum);