RevealTheme logo

Testador de Expressões Regulares

Teste expressões regulares de JavaScript contra qualquer entrada. Veja as correspondências, os grupos e as substituições em tempo real.

0 correspondência(s)

Como usar esta ferramenta

  1. 1

    Type your regular expression into the pattern field (no slashes — enter the bare pattern).

  2. 2

    Set the flags in the small field beside it, such as g, i, m, or a combination like gi.

  3. 3

    Paste or type the text you want to search into the large input box below.

  4. 4

    Read the match count and each matched substring with its character index in the results panel; an invalid pattern shows the engine's error message instead.

O que são as expressões regulares e como lê-las?

As expressões regulares (regex) são uma pequena linguagem específica de domínio para buscar padrões em texto. Toda linguagem de programação moderna tem um motor de regex; esta ferramenta usa o RegExp nativo do JavaScript, que segue a especificação ECMAScript 2018+ e suporta recursos modernos como as asserções lookbehind, os grupos de captura nomeados, os escapes de propriedades Unicode e o indicador dotAll. Os blocos básicos: os caracteres literais correspondem a si mesmos (a regex 'gato' corresponde à palavra gato); as classes de caracteres correspondem a qualquer um de um conjunto ('[a-z]' corresponde a letras minúsculas); os quantificadores controlam a repetição (* zero ou mais, + um ou mais, ? zero ou um, {3,5} entre 3 e 5); as âncoras correspondem a posições (^ início da cadeia, $ fim, \b limite de palavra); os grupos capturam subcorrespondências ((gato|cachorro) corresponde a qualquer um, capturando qual); a alternância oferece escolha. A regex brilha para analisar texto estruturado mas não gramatical (logs, e-mails, números de telefone, atributos HTML simples) e falha com estruturas genuinamente recursivas (HTML completo, JSON aninhado). Para essas, use um analisador. Este testador permite que você itere sobre um padrão com retorno instantâneo: altere a regex e as correspondências são recalculadas a cada tecla pressionada.

Casos de uso comuns

  • Valide o formato da entrada do usuário (e-mails, números de telefone, CEPs) antes de enviá-la ao seu servidor.

  • Extraia dados estruturados de arquivos de log (carimbos de data/hora, IPs, códigos de status, caminhos de requisição).

  • Busque e substitua em centenas de arquivos usando a busca por regex do seu editor.

  • Escreva regras de reescrita de URL para Nginx, o .htaccess do Apache ou as reescritas do Vercel.

  • Analise formatos simples semelhantes a CSV em que um analisador completo seria exagero.

  • Crie padrões de validação de formulários para o atributo pattern de <input> em HTML.

Perguntas frequentes

Quais indicadores são suportados?
g (global: encontra todas as correspondências, não só a primeira), i (sem distinção de maiúsculas e minúsculas), m (multilinha: ^ e $ correspondem a quebras de linha), s (dotAll: . corresponde a quebras de linha), u (unicode: tratamento correto de caracteres multibyte), y (sticky: corresponde apenas em lastIndex). Combine indicadores concatenando-os: 'gim' habilita global + sem distinção de maiúsculas/minúsculas + multilinha.
Como faço correspondências em várias linhas?
Duas necessidades distintas: 'm' faz com que ^ e $ correspondam a quebras de linha (trata cada linha como uma cadeia separada para as âncoras). 's' faz com que . corresponda a quebras de linha (caso contrário, . corresponde a tudo, exceto quebras de linha). Use ambas juntas se precisar corresponder a padrões que abrangem várias linhas.
Qual é a diferença entre quantificadores gananciosos e preguiçosos?
Os quantificadores gananciosos (*, +, {n,m}) correspondem ao máximo possível. Os preguiçosos (*?, +?, {n,m}?) correspondem ao mínimo possível. O exemplo clássico: a regex '<.*>' sobre '<a><b>' corresponde a todo '<a><b>'; '<.*?>' corresponde apenas a '<a>'.
Quando NÃO devo usar regex?
Quando a estrutura é genuinamente recursiva (HTML, JSON, parênteses balanceados). Quando você precisa tratar corretamente cada caso-limite (analisar datas com fusos horários, nomes com apóstrofos). Quando a gramática da entrada é bem definida e existe uma biblioteca de análise. Famosa resposta do Stack Overflow: a regex é ótima para encontrar padrões, terrível para analisar linguagens.
O que são os grupos de captura nomeados?
Em vez de (\d{4})-(\d{2})-(\d{2}) devolver grupos numerados, use (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) e acesse as correspondências como match.groups.year. Muito mais sustentável em código real.
Por que minha regex é lenta com certas entradas?
Retrocesso catastrófico. Os quantificadores aninhados como (a+)+ podem levar um tempo exponencial com entradas adversariais. Evite os quantificadores aninhados e as alternâncias sobrepostas. O motor do JavaScript não tem tempo limite, então uma regex ruim pode travar uma requisição. Para produção, use o pacote npm safe-regex para detectar padrões arriscados.
Isso corresponde ao que o motor de regex do meu servidor faz?
Na maior parte: os principais sabores de regex (PCRE, re do Python, regex do Ruby, Java) são semelhantes, mas têm diferenças sutis. A sintaxe de lookbehind, o comportamento das classes de caracteres e o tratamento de Unicode variam. Para paridade em produção, teste-a também na linguagem de destino.

Ferramentas relacionadas