TanodTools
PT

Testador de regex

Teste uma expressão regular em um texto de exemplo e veja cada correspondência, os grupos de captura e o resultado de uma substituição.

Funciona inteiramente no seu navegador

Flags

Correspondências no texto

  
#PosiçãoCorrespondênciaGrupos

Sintaxe de regex do JavaScript (ECMAScript), conforme o seu navegador a suporta. Texto de até 5 MB; as primeiras 1.000 correspondências são listadas e destacadas. Um padrão que roda por mais de 2 segundos é interrompido.

Como testar uma expressão regular

  1. Digite o padrão entre as barras e marque as flags de que precisa, como g para todas as correspondências ou i para ignorar maiúsculas e minúsculas.
  2. Cole o texto de teste. As correspondências são destacadas enquanto você digita, e a tabela lista cada uma com a posição e os grupos de captura.
  3. Para conferir uma substituição, digite um texto de substituição como $2-$1 ou $<year> e leia o resultado logo abaixo.

Como testar padrões com segurança

Este testador de regex monta um RegExp JavaScript com o seu padrão e as suas flags e o executa em um worker em segundo plano, o mesmo motor que o seu código vai usar neste navegador. As correspondências voltam com a posição inicial e todos os grupos de captura, e a página as desenha sobre o seu texto com destaques alternados, para que correspondências vizinhas continuem distinguíveis. Uma correspondência vazia, como a que \b ou a* podem produzir, aparece como uma barra fina.

Executar o padrão em um worker é importante porque uma expressão regular pode levar tempo exponencial. Se um padrão ainda estiver rodando após 2 segundos, o worker é interrompido e você recebe uma mensagem em vez de uma aba travada. A mesma proteção vale para Localizar e substituir.

As posições são contadas em unidades de código UTF-16, que é como as strings do JavaScript contam: um emoji ou outro caractere fora do plano básico ocupa duas. A lista mostra as primeiras 1.000 correspondências; a contagem total acima dela inclui todas.

Dicas

Perguntas frequentes

Qual sabor (flavor) de regex é usado?

O do JavaScript, executado pelo motor do seu próprio navegador, então os resultados são exatamente os que o RegExp do seu navegador ou do Node.js retorna. A maior parte da sintaxe do dia a dia é igual à do PCRE, do Python e do Java, mas alguns recursos mudam: quantificadores possessivos e grupos atômicos não são suportados, e lookbehind, grupos nomeados e a flag v exigem um navegador atual.

Por que só aparece uma correspondência?

Sem a flag g (global), uma regex JavaScript encontra só a primeira correspondência, e o replace troca só a primeira ocorrência. Marque g para encontrar todas. O testador segue a linguagem à risca, então o que você vê é o que o seu código vai fazer.

O que as flags fazem?

g encontra todas as correspondências, i ignora maiúsculas e minúsculas, m faz ^ e $ corresponderem em quebras de linha, s deixa o . corresponder a quebras de linha, u ativa o tratamento completo de Unicode, v é o modo Unicode mais novo com operações de conjunto, y (sticky) só corresponde na posição atual, e d registra o início de cada grupo, algo que o testador já usa para as posições dos grupos de qualquer forma.

Como uso grupos na substituição?

$1, $2 e assim por diante inserem grupos numerados, $<name> insere um grupo nomeado, $& insere a correspondência inteira, $` e $' inserem o texto antes e depois dela, e $$ escreve um cifrão literal.

Por que meu padrão parou com "demorou demais"?

Alguns padrões, como ^(a+)+$ em uma longa sequência de letras a que não termina como ele espera, fazem o motor testar um número enorme de formas de corresponder. Isso se chama backtracking catastrófico. O testador executa cada padrão em um worker em segundo plano e o interrompe após 2 segundos, para a página continuar utilizável. Reescreva repetições aninhadas como (a+)+ como a+.

Meu texto é enviado para algum lugar?

Não. O padrão e o texto ficam no seu navegador; a busca acontece no seu dispositivo, e nada é enviado ou armazenado.