Sobre: Testador de regex
Uma expressão regular (regex) descreve um padrão de texto – por exemplo, “quatro dígitos, um hífen e depois dois dígitos” – e é usada para buscar, validar e reescrever texto em código, editores, ferramentas de linha de comando e planilhas. Fazer um padrão corresponder exatamente ao que você quer é muito mais fácil quando dá para ver as correspondências na hora.
Este testador usa o próprio mecanismo de regex JavaScript do seu navegador, então os resultados são os mesmos que RegExp, match e replace produzem em JavaScript e Node.js. As correspondências são destacadas enquanto você digita, cada uma é listada com a posição e os grupos de captura, e o modo “Substituição” mostra o que um texto de substituição produz.
Os padrões rodam em um worker em segundo plano com limite de tempo, então um padrão com backtracking catastrófico não consegue travar a página. Seu padrão e seu texto ficam no seu navegador.
Como usar
- Digite um padrão em “Expressão regular”, sem as barras ao redor – ou clique em um dos “Exemplos”.
- Ative ou desative as “Flags”: g, i, m, s, u e y, além de d e v se o seu navegador oferecer suporte a elas.
- Cole o texto em que quer buscar em “Texto de teste”. As correspondências ficam marcadas em “Correspondências destacadas” e listadas em “Detalhes das correspondências”, com índice, comprimento e grupos.
- Escolha “Substituição” em “Modo” e informe um “Texto de substituição” como $<day>/$<month>/$<year> para ver o “Resultado após a substituição”; depois clique em “Copiar resultado”.
- Consulte a sintaxe no “Guia rápido” abaixo do testador e use “Limpar” para começar de novo.
Recursos
- Destaque ao vivo e detalhes das correspondências: Cada correspondência é destacada no texto e listada com índice, comprimento e grupos de captura numerados e nomeados. Correspondências vazias (de comprimento zero) aparecem como marcadores finos, e com a flag d o início e o fim de cada grupo também são incluídos.
- Pré-visualização da substituição: Teste uma substituição com a sintaxe do JavaScript: $1 e $<name> para grupos, $& para a correspondência inteira, $` e $' para o texto antes e depois dela, e $$ para um cifrão.
- O mecanismo JavaScript de verdade: As correspondências usam a implementação de RegExp do navegador, então o comportamento e os erros de sintaxe são exatamente os que o seu código JavaScript vai ver.
- Proteção contra padrões descontrolados: Cada execução acontece em um Web Worker e é interrompida depois de 1,5 segundo. Em vez de uma aba travada, você recebe uma explicação sobre backtracking catastrófico.
- Exemplos e guia rápido: Carregue padrões simples para textos parecidos com e-mail, datas ISO, cores hex e palavras repetidas, e consulte rapidamente os tokens mais comuns e os códigos de substituição.
Exemplos
Reformatar datas
Carregue o exemplo de data ISO e mude para “Substituição”: o padrão captura ano, mês e dia como grupos nomeados, e a substituição $<day>/$<month>/$<year> transforma 2024-03-15 em 15/03/2024.
Encontrar palavras duplicadas
O padrão \b(\w+)\s+\1\b com a flag i encontra "is is" e "the the" – mesmo quando a palavra repetida continua na linha seguinte. Substituir por $1 remove a duplicata.
Extrair cores de um CSS
Com #(?:[0-9a-f]{6}|[0-9a-f]{3})\b e as flags g e i, a lista de correspondências mostra todas as cores hex de três e seis dígitos de uma folha de estilos, enquanto valores inválidos como #12345G são ignorados.
Diagnosticar um padrão lento
O exemplo “Padrão lento” ^(a+)+$ aplicado a uma longa sequência de "a" seguida de "b" é interrompido depois de 1,5 segundo com um aviso. O + aninhado é o problema; ^a+$ corresponde ao mesmo texto instantaneamente.
Limitações e observações
- Só a sintaxe de regex do JavaScript é suportada. Recursos de outros sabores, como quantificadores possessivos, grupos atômicos, recursão ou \A e \Z, não estão disponíveis, e a sintaxe exata aceita depende do seu navegador.
- O texto de teste é limitado a 200.000 caracteres. Até 5.000 correspondências são listadas e destacadas; a contagem de correspondências e o modo “Substituição” continuam cobrindo todas elas.
- Cada execução é interrompida depois de 1,5 segundo. Por isso, um padrão legítimo, mas muito pesado, aplicado a um texto longo também pode ser interrompido.
- Como no JavaScript, sem a flag g só a primeira correspondência é encontrada e substituída.
- Os padrões de exemplo são simples de propósito, para aprender e fazer buscas rápidas. Eles não são validadores completos – o exemplo de data, por exemplo, aceita 2024-02-30.
- O índice e o comprimento são contados em unidades de código UTF-16, como no JavaScript, então um emoji conta como dois caracteres.
Perguntas frequentes
Que sabor de regex este testador usa?
JavaScript (ECMAScript), executado pelo mecanismo do seu navegador. Padrões que funcionam aqui funcionam do mesmo jeito em código JavaScript e Node.js. Padrões de Python, PCRE (PHP) e Java costumam ser parecidos, mas diferem em detalhes como o suporte a lookbehind, flags embutidas e a sintaxe de grupos nomeados.
Por que meu padrão encontra só uma correspondência?
Ative a flag g (global). Sem ela, o JavaScript para depois da primeira correspondência – tanto ao buscar quanto ao substituir.
O que é backtracking catastrófico?
Padrões com quantificadores aninhados ou sobrepostos, como (a+)+ ou (\w|\d)*, podem testar um número exponencial de caminhos em um texto que quase corresponde. O mecanismo pode então rodar por minutos. Deixar o padrão mais específico – por exemplo ^a+$ em vez de ^(a+)+$ – geralmente resolve.
Como uso um grupo capturado na substituição?
Escreva $1, $2 e assim por diante para grupos numerados, ou $<name> para um grupo escrito como (?<name>…). $& insere a correspondência inteira, e $$ insere um cifrão literal.
Preciso escapar as barras normais?
Não neste testador: as barras ao redor da caixa são só decoração, e o padrão é passado diretamente para new RegExp(). Dentro de um literal de regex do JavaScript, como /a\/b/, a barra precisa de escape.
Meu texto é enviado para um servidor?
Não. As correspondências são calculadas em um Web Worker dentro desta página, e nem o padrão nem o texto são enviados pela rede.