freeCodeCamp/curriculum/challenges/portuguese/02-javascript-algorithms-an.../regular-expressions/reuse-patterns-using-captur...

2.9 KiB

id title challengeType forumTopicId dashedName
587d7dbb367417b2b2512baa Reusar padrões com grupos de captura 1 301364 reuse-patterns-using-capture-groups

--description--

Vamos supor que você deseja encontrar a correspondência de uma palavra que ocorra várias vezes como abaixo.

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? Grupos de captura 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+)/.

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.

O exemplo abaixo captura qualquer palavra que se repita três vezes, separada por espaços:

let repeatRegex = /(\w+) \1 \1/;
repeatRegex.test(repeatStr); // Returns true
repeatStr.match(repeatRegex); // Returns ["row row row", "row"]

Usar o método .match() em uma string retornará um array com a substring correspondente, juntamente com seus grupos capturados.

--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--

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

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

A regex deve reusar um grupo de captura duas vezes.

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

A regex deve encontrar a string 42 42 42.

reRegex.lastIndex = 0;
assert(reRegex.test('42 42 42'));

A regex deve encontrar a string 100 100 100.

reRegex.lastIndex = 0;
assert(reRegex.test('100 100 100'));

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

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

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

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

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

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

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

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

A regex deve encontrar a string 10 10 10.

reRegex.lastIndex = 0;
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);