Sem upload, 100% local, sem conta

Tutorial

Como testar uma regex sem instalar nada

Você escreveu um padrão e precisa saber se ele realmente casa com o que você espera antes de colocá-lo no código. Instalar uma ferramenta de desktop ou colar um log privado em um site qualquer é exagero, e muitas vezes arriscado. Este guia mostra como rodar uma regex contra o seu próprio texto direto no navegador, ativar as flags que mudam o comportamento, ler os grupos de captura que ela extrai e ver as correspondências realçadas em linha, com o padrão e o texto nunca saindo da sua aba.

Passo a passo

  1. Abra o testador de regex e digite o seu padrão no campo entre as duas barras. Você não escreve as barras: a ferramenta as exibe para que você veja o padrão do jeito que um motor o lê. Cole o seu texto de exemplo na caixa abaixo, por exemplo algumas linhas de log, uma lista de e-mails ou um bloco de código que você quer pesquisar.
    Um padrão de regex e uma string de flags inseridos no testador, com texto de exemplo colado na caixa abaixo
  2. Defina as flags na pequena caixa ao lado do padrão. A flag g encontra todas as correspondências em vez de parar na primeira; i torna a correspondência insensível a maiúsculas e minúsculas; m faz com que as âncoras ^ e $ casem com o início e o fim de cada linha em vez do texto inteiro; s faz com que o ponto também case com quebras de linha. Combine-as livremente, por exemplo gim.
  3. Pressione Testar. Cada correspondência é realçada diretamente no seu texto, e a lista abaixo mostra cada correspondência com sua posição e o valor de cada grupo de captura. Ajuste o padrão e rode de novo: a prévia se atualiza para que você afine o padrão até que ele capture exatamente o que você queria e nada mais.
    O resultado do teste: correspondências realçadas em linha e uma lista mostrando a posição de cada correspondência e seus grupos de captura

Grupos de captura, nomeados e numerados

Um grupo de captura é a parte do seu padrão envolta em parênteses, e é como você extrai um pedaço de cada correspondência em vez de apenas confirmar que o todo casou. Os grupos numerados são contados da esquerda para a direita pelo seu parêntese de abertura: em (\d{4})-(\d{2})-(\d{2}) o grupo 1 é o ano, o grupo 2 o mês, o grupo 3 o dia. Os grupos nomeados usam a sintaxe (?<name>...), então (?<year>\d{4}) se lê bem melhor do que um número solto quando o padrão cresce. Se você só quer agrupar sem capturar, por exemplo para aplicar um quantificador a vários caracteres, use um grupo sem captura (?:...) para que ele não polua a sua lista de resultados. O testador mostra o valor de cada grupo em cada correspondência, que é a forma mais rápida de confirmar que você está extraindo a fatia certa.

Quando um padrão trava ou se comporta mal

Dois problemas surgem repetidamente. O primeiro é o backtracking catastrófico: um padrão como (a+)+$ rodado contra uma string longa que não casa pode fazer o motor tentar um número exponencial de caminhos e congelar. O testador roda cada teste em um Web Worker com um curto cão de guarda, então em vez de uma aba travada você recebe uma mensagem clara e pode simplificar o padrão, geralmente tornando um quantificador possessivo na essência, ancorando-o ou evitando repetição aninhada. O segundo é a correspondência gulosa versus preguiçosa: por padrão .* pega o máximo que pode, então para casar com o conteúdo de uma única tag HTML você quer a forma preguiçosa .*? em vez disso. Se você está comparando duas versões ligeiramente diferentes de uma string para ver o que o seu padrão deveria mirar, a ferramenta de diff de texto as alinha para que a diferença fique óbvia antes de você escrever a expressão.

Como o navegador avalia sua regex

Os navegadores modernos incluem um mecanismo de regex ECMAScript nativo que suporta o conjunto completo de flags: correspondência sem diferenciação de maiúsculas e minúsculas (i), modo multilinha (m), dotAll (s), Unicode (u) e a flag sticky (y). Quando você digita um padrão no testador, o mecanismo o compila para um NFA interno e o avalia em relação à sua string de teste em tempo real, reportando cada posição de correspondência e quaisquer grupos de captura. O backtracking acontece localmente na sua CPU: um padrão como (a+)+ em uma string longa sem correspondência pode girar por segundos, e ver essa paralisação no navegador é um feedback útil antes de implantar o padrão em código de produção. Nenhum texto sai da página, então você pode colar amostras de log ou qualquer entrada sem roteá-la por um servidor de terceiros.

As ferramentas usadas neste guia

Perguntas frequentes

O meu padrão ou texto de teste é enviado para um servidor?

Não. A regex roda dentro de um Web Worker no seu próprio navegador, então o padrão e o texto contra o qual você testa ficam na aba. Isso importa porque o texto que você cola é muitas vezes um log real, uma lista de clientes ou uma configuração interna, exatamente o tipo de dado que você não quer no servidor de outra pessoa. Abra o painel Rede nas ferramentas de desenvolvedor enquanto pressiona Testar e você não verá nenhuma requisição levando o seu texto para fora. Também continua funcionando offline depois que a página carrega.

Qual variante de regex o testador usa?

Ele usa o motor de expressões regulares do JavaScript embutido no seu navegador, o mesmo que roda no Node.js e em qualquer página web. Isso cobre a sintaxe comum: classes de caracteres, quantificadores, âncoras, alternância, grupos de captura numerados e nomeados, lookahead e lookbehind. Alguns recursos de outras variantes, como recursão no estilo Perl ou quantificadores possessivos, não fazem parte do motor JavaScript, então se um padrão que você copiou de um projeto PHP ou Python se comporta de forma diferente, essa diferença de variante costuma ser o motivo.

Fontes