Testador de Regex

Escreva uma expressão regular, cole um texto de teste e veja as correspondências destacadas ao vivo — com grupos de captura, flags e mensagens de erro claras.

1.032 visualizações

Como Funciona

Uma expressão regular descreve um padrão de caracteres em vez de uma string literal, permitindo que uma única expressão curta corresponda a toda uma família de textos: qualquer endereço de e-mail, qualquer número de telefone em vários formatos, qualquer linha de um arquivo de log que comece com "ERROR". Digite uma expressão regular JavaScript, alterne suas flags (g todas as correspondências, i sem diferenciar maiúsculas/minúsculas, m âncoras multilinha, s o ponto casa com quebra de linha, u Unicode completo) e cole um texto de exemplo: cada correspondência é destacada no lugar e listada abaixo com sua posição e quaisquer grupos de captura. Parênteses () criam um grupo de captura — uma forma de extrair um trecho específico do texto correspondido, como o domínio de um e-mail ou o ano de uma data, em vez de apenas saber que houve uma correspondência.

Uma distinção que confunde quase todo mundo no início: quantificadores gulosos versus preguiçosos. .* é guloso — tenta casar o máximo de texto possível, retrocedendo somente se necessário. Contra a entrada <b>bold</b> and <i>italic</i>, o padrão <.*> casa gulosamente desde o primeiro < até o último >, engolindo as duas tags. Adicionar um ? para obter .*? o torna preguiçoso — ele casa o mínimo possível, então <.*?> para no primeiro > e casa corretamente apenas <b>. Essa distinção é exatamente o motivo pelo qual regexes ingênuos para casar HTML quebram diante de marcação real.

O Que Você Precisa Saber

O mecanismo aqui é a implementação nativa de JavaScript (ECMAScript) do seu próprio navegador, então um padrão que casa aqui casa de forma idêntica no seu código JS — não há camada de tradução para desconfiar. Os "sabores" de regex de outras linguagens — PCRE (PHP), o re do Python, o Pattern do Java — compartilham a maior parte da sintaxe central (classes de caracteres, quantificadores, grupos), mas divergem em recursos avançados: suporte a lookbehind, sintaxe de grupos nomeados, quantificadores possessivos e algumas sequências de escape diferem. Sempre reteste os casos-limite na linguagem de destino real antes de publicar.

Cuidado com o backtracking catastrófico: padrões com quantificadores aninhados ou sobrepostos, como (a+)+b testado contra uma string longa de caracteres "a" sem um "b" no final, podem forçar o mecanismo a um backtracking exponencial e travar a página — ou seu servidor de produção, pelo mesmo motivo. Se um padrão travar aqui, encurte primeiro o texto de teste e depois reestruture o padrão (geralmente removendo por completo a repetição aninhada) em vez de simplesmente jogar mais CPU no problema. Tudo roda localmente no seu navegador; nenhum padrão ou texto é transmitido.

Perguntas Frequentes

Qual variante de regex isso usa?

JavaScript (ECMAScript) — o mecanismo nativo do navegador. Os padrões se comportam exatamente como no seu código JS; PCRE e Python compartilham a maior parte da sintaxe, mas diferem em algumas construções avançadas.

O que cada flag significa?

g encontra todas as correspondências em vez de apenas a primeira; i ignora maiúsculas/minúsculas; m faz ^ e $ casarem por linha; s faz o ponto também casar com quebras de linha; u ativa o tratamento completo de Unicode.

Por que meu padrão trava a página?

Certos padrões com quantificadores aninhados (como (a+)+b) podem causar backtracking catastrófico em entradas longas. Encurte o texto de teste ou reestruture o padrão — o mesmo travamento aconteceria no seu código em produção.

O que é um grupo de captura e por que ele importa?

Parênteses ao redor de parte de um padrão criam um grupo de captura, que extrai aquela substring específica separadamente da correspondência completa — por exemplo, (\d{4})-(\d{2})-(\d{2}) casado contra uma data retorna o ano, o mês e o dia como três capturas individuais, em vez de apenas confirmar que a string inteira parecia uma data. Grupos não capturantes, escritos como (?:...), agrupam por estrutura sem gerar uma captura extra.

Por que meu padrão casou mais (ou menos) texto do que eu esperava?

Quase sempre é uma confusão entre guloso e preguiçoso. .* e quantificadores parecidos pegam o máximo possível por padrão; adicione um ? (.*?, +?) para torná-los preguiçosos e parar no primeiro ponto possível em vez do último. Esse único caractere costuma ser a correção quando um regex casa texto demais em várias linhas ou tags.

Comentários

Ainda não há comentários — seja o primeiro a escrever um!

Ferramentas Semelhantes