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