Quantificadores e Quebras de Linha em Regex no JavaScript
Tutorial avançado de JavaScript focado no uso de quantificadores em expressões regulares e no caractere especial de nova linha \n.
Neste guia, exploraremos os poderosos quantificadores que ajudam a controlar quantas vezes um padrão deve aparecer nas buscas em texto. Vamos mergulhar no tema e desbloquear o potencial dos quantificadores de regex para tornar o seu código mais eficiente e eficaz!
Entendendo os Quantificadores em Expressões Regulares do JavaScript
Os quantificadores em expressões regulares são ferramentas poderosas que permitem especificar quantas vezes um caractere, grupo ou classe de caracteres deve aparecer na string de entrada para que haja correspondência. Aqui está uma visão geral rápida dos quantificadores mais usados em JavaScript:
*(asterisco): Corresponde a 0 ou mais repetições do elemento anterior.+(mais): Corresponde a 1 ou mais repetições do elemento anterior.?(ponto de interrogação): Corresponde a 0 ou 1 repetição do elemento anterior.{n}: Corresponde exatamente a n ocorrências do elemento anterior.{n,}: Corresponde a pelo menos n ocorrências do elemento anterior.{n,m}: Corresponde entre n e m ocorrências do elemento anterior, inclusive.
Um quantificador sempre se aplica ao único elemento imediatamente antes dele — um caractere, uma sequência de escape como \d, uma classe de caracteres como [a-z], ou um grupo como (abc). Ele nunca se aplica ao padrão inteiro de uma só vez.
Exemplo Prático: Usando o Quantificador *
Neste exemplo, /A*/i corresponde a zero ou mais ocorrências de 'A' (sem distinção de maiúsculas e minúsculas), capturando a sequência "Aaaaaa" no início da string. O asterisco permite a correspondência mesmo que 'A' esteja ausente.
Exemplo Prático: Usando o Quantificador +
A expressão \d+ encontra um ou mais dígitos no texto. O resultado inclui 123 e 456 como correspondências separadas, demonstrando a utilidade do + para capturar números completos.
Exemplo Prático: Usando o Quantificador ?
O padrão de regex /colou?r/g corresponde tanto a "color" quanto a "colour". O quantificador ? torna o 'u' anterior opcional, permitindo que o padrão corresponda à palavra independentemente de o 'u' estar presente. O sinalizador g garante que todas as ocorrências no texto sejam encontradas.
Exemplo Prático: Usando o Quantificador {n}
\b\d{4}\b corresponde a uma sequência de exatamente quatro dígitos, reconhecendo 2022 e 1999 como anos.
Considere sempre a eficiência das suas expressões regulares. Padrões ineficientes podem levar a um desempenho lento, especialmente com grandes conjuntos de dados. Otimize seu regex evitando quantificadores desnecessários e usando quantificadores não-gananciosos quando aplicável.
Exemplo Prático: Usando o Quantificador {n,}
O padrão \b[a-zA-Z]{5,}\b corresponde a palavras compostas por pelo menos cinco letras. Isso capturará fantastic e incredible.
Exemplo Prático: Usando o Quantificador {n,m}
O padrão de regex \b[a-zA-Z]{3,6}\b foi projetado para corresponder a palavras contendo entre 3 e 6 letras, delimitadas por fronteiras de palavra para garantir que apenas palavras completas sejam correspondidas. O regex captura "See", "the", "big", "tiny", "ant", "and", "old" e "tree". Ele não corresponde a "elephant" porque excede 6 letras.
Exemplo Prático: Usando o Caractere \n
A sequência de escape \n representa um caractere de nova linha. Em uma expressão regular, ela corresponde à quebra de linha real na string. O padrão /line\n/g encontra a palavra "line" imediatamente seguida de uma nova linha, capturando ambas as instâncias no exemplo.
Os Quantificadores Abreviados São Apenas {n,m}
Os símbolos *, + e ? são apenas formas abreviadas convenientes do formato {n,m}. Conhecer as equivalências torna-os mais fáceis de lembrar:
*é o mesmo que{0,}— zero ou mais.+é o mesmo que{1,}— um ou mais.?é o mesmo que{0,1}— zero ou um.
Ambos os padrões em cada par produzem o resultado idêntico, confirmando que os símbolos e as formas com chaves são intercambiáveis.
Quantificadores São Gananciosos por Padrão
Por padrão, um quantificador é ganancioso: ele captura o máximo possível da string enquanto ainda permite que o padrão geral corresponda. É por isso que um padrão como <.+> consome tudo desde o primeiro < até o último >, e não o primeiro >.
Para parar no primeiro > em vez disso, você adiciona um ? após o quantificador para torná-lo preguiçoso (não-ganancioso): <.+?>. Quantificadores preguiçosos são abordados em profundidade em Quantificadores Gananciosos e Preguiçosos.
Aplicando Quantificadores a Grupos e Classes de Caracteres
Um quantificador repete apenas o único token à sua frente. Para repetir vários caracteres como uma unidade, envolva-os em um grupo de captura com (...). Para repetir qualquer um de um conjunto de caracteres, coloque o quantificador após uma classe de caracteres [...].
O primeiro padrão repete a sequência inteira (abc) duas vezes; sem o grupo, abc{2} repetiria apenas o c final. O exemplo hexadecimal repete a classe [0-9a-f] seis vezes, e o exemplo de telefone combina um grupo repetido com {n} em \d.
Para controlar se as correspondências diferenciam maiúsculas de minúsculas ou abrangem múltiplas linhas, combine quantificadores com os sinalizadores apropriados descritos em Padrões e Sinalizadores.
Conclusão
Compreender e utilizar efetivamente os quantificadores e o caractere \n em JavaScript pode aprimorar significativamente suas capacidades de manipulação de texto no desenvolvimento web. Essas ferramentas permitem poderosas correspondências de padrões e extração de dados, tornando seu código JavaScript mais eficiente e suas aplicações mais dinâmicas e responsivas.