Testador de regex

Escreva um padrão e veja cada correspondência destacada no contexto — sem botão, e o motor é o RegExp do próprio JavaScript do navegador.

Como usar

  1. Digite o padrão sem as barras e ative as flags necessárias: as correspondências são atualizadas enquanto você digita, sem botão para clicar.
  2. Cole o texto a testar. Cada correspondência é destacada no painel de resultado, e cada uma é listada com sua posição, seu texto e seus grupos de captura.
  3. Copie todos os valores correspondidos de uma vez, ou baixe-os como arquivo de texto — uma correspondência por linha.

Exemplo

Padrão e texto

(\w+)@(\w+)\.(\w+)

Fale com ana@exemplo.com ou lin@exemplo.org para detalhes.

Correspondências

Correspondências: 2
#1 [8–23] ana@exemplo.com
   1: ana  2: exemplo  3: com
#2 [31–46] lin@exemplo.org
   1: lin  2: exemplo  3: org

A primeira linha é o padrão (sem barras), o resto é o texto de teste. Os intervalos são deslocamentos no texto baseados em 0, com fim exclusivo — os mesmos números que o JavaScript informa em match.index. A correspondência global está sempre ativa, então todas as ocorrências são encontradas mesmo sem um botão g.

Regras, limites e problemas conhecidos

  • O motor é o RegExp do próprio JavaScript do navegador: sem sabores PCRE, Python, Go ou RE2, e sem seletor de sabor. \A, \z e flags embutidas como (?i) não são suportadas.
  • A correspondência global está sempre ativa; as únicas flags são i, m, s e u. y (sticky), d (índices) e v (conjuntos Unicode) não são oferecidas.
  • As barras /…/ são decoração: uma / dentro do seu padrão não precisa de escape aqui, ao contrário de um literal JavaScript. A leitura de flags ao lado delas é a string exata para reutilizar no código.
  • Um erro de sintaxe mostra a mensagem do próprio navegador (em inglês) após um prefixo localizado; o texto varia entre navegadores.
  • Texto de teste vazio não produz resultado — não há linha para testar, então padrões como ^$ não podem ser verificados aqui.
  • Até 2000 correspondências são coletadas (a contagem então mostra 2000+) e a lista renderiza as primeiras 200. Ambos os limites são avisados em vez de truncar em silêncio.
  • Texto acima de 100.000 caracteres ainda é atualizado enquanto você digita, com um atraso maior antes de o resultado aparecer.
  • O retrocesso catastrófico pode travar a aba: uma regex JavaScript roda de forma síncrona e não pode ser interrompida, então não há timeout. Não cole padrões não confiáveis nem textos enormes.
  • \w, \b e \d são apenas ASCII mesmo com u — corresponda letras chinesas ou árabes com \p{L} e a flag u. Sem u, \p{L} não é erro: ele degrada silenciosamente para uma correspondência literal.
  • i usa o dobramento simples de maiúsculas Unicode, não regras de locale: İ e i turcos não se correspondem, e ß não se dobra em SS.
  • Os intervalos são deslocamentos UTF-16 baseados em 0, com fim exclusivo, então um emoji conta como dois. Um grupo que não participou aparece como —; um grupo que correspondeu a uma string vazia aparece vazio.
  • Correspondências de comprimento zero (\b, a*, (?=x)) aparecem como um marcador fino e seu intervalo mostra n–n.
  • Copiar e baixar listam apenas os valores correspondidos, um por linha, sem números, intervalos ou grupos. Uma correspondência com quebras de linha, portanto, ocupa várias linhas.
  • Sem prévia de substituição, sem gerador de código, sem link permanente e sem padrões salvos: o padrão nunca sai da caixa de entrada e nunca entra na URL.

Quando o padrão funciona, estes são os próximos passos habituais.