⊗jsSpREEP 129 of 294 menu

Grupos de captura na própria expressão regular em JavaScript

O conteúdo dos grupos de captura não está disponível apenas na string de substituição, mas também na própria expressão regular: nós podemos colocar algo em um grupo de captura e então, diretamente na expressão regular, indicar que o conteúdo desse grupo de captura deve aparecer aqui.

O conteúdo dos grupos de captura está disponível por seus números, precedidos por uma barra invertida. Por exemplo, o primeiro grupo de captura estará disponível assim: \1, o segundo grupo de captura assim - \2, o terceiro - \3 e assim por diante.

Estou certo de que tudo escrito acima ainda é bastante vago para você. Isso não é surpreendente, pois os grupos de captura são o aspecto mais difícil de entender das expressões regulares. Vamos entender com exemplos.

Exemplo

Suponha que temos a seguinte string:

let str = 'aa bb cd ef';

Vamos encontrar nela todos os locais onde existem duas letras iguais consecutivas. Para resolver o problema, vamos procurar qualquer letra, colocá-la em um grupo de captura e, em seguida, verificar se o próximo caractere é o conteúdo desse grupo de captura:

let res = str.replace(/([a-z])\1/g, '!');

Como resultado, o seguinte será armazenado na variável:

'! ! cd ef'

Exemplo

Suponha que temos a seguinte string:

let str = 'asxca buzxb csgd';

Vamos encontrar nela todas as palavras em que a primeira e a última letras são iguais. Para resolver o problema, escreveremos o seguinte padrão: uma letra, seguida por uma ou mais letras, e então a mesma letra que a primeira:

let res = str.replace(/([a-z])[a-z]+\1/g, '!');

Como resultado, o seguinte será armazenado na variável:

'! ! csgd'

Problemas práticos

Dada a string:

let str = 'aaa bbb ccc xyz';

Encontre todas as substrings que contêm três letras iguais consecutivas.

Dada a string:

let str = 'a aa aaa aaaa aaaaa';

Encontre todas as substrings que contêm duas ou mais letras iguais consecutivas.

Dada a string:

let str = 'aaa aaa bbb bbb ccc ddd';

Encontre todas as substrings que contêm duas palavras iguais consecutivas.

idituzlplhi