Referências anteriores

Resumo : neste tutorial, você aprenderá sobre referências anteriores de regex JavaScript e como aplicá-las de maneira eficaz.

Introdução às referências anteriores de regex JavaScript

As referências anteriores permitem fazer referência aos grupos de captura nas expressões regulares. Tecnicamente falando, as referências anteriores são como variáveis ​​em expressões regulares.

Aqui está a sintaxe de uma referência anterior:

\NLinguagem de código:  Python  ( python )

Nesta sintaxe, Né um número inteiro como 1, 2 e 3 que representa o número do grupo de captura correspondente.

Suponha que você tenha uma string com a palavra duplicada JavaScriptcomo esta:

const s = 'JavaScript JavaScript is awesome';Linguagem de código:  Python  ( python )

E você deseja remover a palavra duplicada ( JavaScript) para que a string resultante seja:

'JavaScript is awesome'Linguagem de código:  Python  ( python )

Para fazer isso, você pode usar uma referência anterior na expressão regular.

Primeiro, combine uma palavra:

/\w+\s+/Linguagem de código:  Python  ( python )

Segundo, crie um grupo de captura que capture a palavra:

/(\w+)\s+/Linguagem de código:  Python  ( python )

Terceiro, use uma referência anterior para fazer referência ao primeiro grupo de captura:

/(\w+)\s+\1/Linguagem de código:  Python  ( python )

Nesse padrão, \1é uma referência anterior que faz referência ao \w+grupo de captura ( ).

Finalmente, substitua a partida inteira pelo primeiro grupo de captura usando o String.replace()método:

const s = 'JavaScript JavaScript is cool';
const pattern = /(\w+)\s+\1/;

const result = s.replace(pattern, '$1');

console.log(result);
Linguagem de código:  Python  ( python )

Saída:

JavaScript is coolLinguagem de código:  Python  ( python )

Exemplos de referência anterior de regex JavaScript

Os exemplos a seguir mostram algumas aplicações práticas de referências anteriores.

1) Usando referências anteriores para colocar texto entre aspas

Para colocar o texto entre aspas duplas assim:

"JavaScript Regex Backreferences"Linguagem de código:  Python  ( python )

Ou aspas simples:

'JavaScript Regex Backreferences'Linguagem de código:  Python  ( python )

Mas não misturado entre aspas simples e duplas:

'not match"Linguagem de código:  Python  ( python )

Para fazer isso, você pode criar a seguinte expressão regular:

/[\'"](.*?)[\'"]/Linguagem de código:  Python  ( python )

No entanto, esta expressão regular também corresponde ao texto que começa com aspas simples (‘) e termina com aspas duplas (“) ou vice-versa. Por exemplo:

const message = `"JavaScript's cool". They said`;
const pattern = /[\'"].*?[\'"]/;

const match = message.match(pattern);

console.log(match[0]);
Linguagem de código:  Python  ( python )

Ele retorna o "JavaScript'não "JavaScript's cool".

Para resolver isso, você pode usar uma referência anterior na expressão regular:

/([\'"]).*?\1/Linguagem de código:  Python  ( python )

A referência anterior \1faz referência ao primeiro grupo de captura. Se o subgrupo começar com aspas simples, \1corresponde à aspas simples. E se o subgrupo começar com aspas duplas, \1corresponderá às aspas duplas.

Por exemplo:

const message = `"JavaScript's cool". They said`;
const pattern = /([\'"]).*?\1/;

const match = message.match(pattern);

console.log(match[0]);
Linguagem de código:  Python  ( python )

Saída:

"JavaScript's cool"Linguagem de código:  Python  ( python )

2) Usando referências anteriores para encontrar palavras que tenham pelo menos um caractere repetido consecutivo

O exemplo a seguir mostra como usar uma referência anterior para encontrar a palavra que possui pelo menos um caractere repetido consecutivo, por exemplo, apple(a letra pé repetida):

const words = ['apple', 'orange', 'strawberry'];
const pattern = /\b\w*(\w)\1\w*\b/;

for (const word of words) {
  const result = word.match(pattern);
  if (result) {
    console.log(result[0], '->', result[1]);
  }
}Linguagem de código:  Python  ( python )

Saída:

apple -> p
strawberry -> rLinguagem de código:  Python  ( python )

Resumo

  • Use referências anteriores para fazer referência aos grupos de captura em uma expressão regular.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *