Skip to main content
UtilityStack

Testador de regex — expressões regulares JavaScript

Construa uma expressão regular e veja-a casar (ou falhar) com sua string de teste em tempo real. Grupos de captura, flags e prévia de substituição, tudo ao vivo; nada sai do seu navegador.

2 correspondência(s)
Padrão
//gi
Substituição
String de teste
Resultado da substituição
Reach out at <<hello@example.com>> or <<support@utility.test>> for help.
Correspondências
  • @13hello@example.com
  • @34support@utility.test

O que é uma expressão regular?

Uma expressão regular (regex) é uma pequena linguagem para descrever padrões em texto. Com poucos caracteres você consegue extrair e-mails de um parágrafo, validar que um CEP segue o formato de um país, ou reescrever cada identificador snake_case de um arquivo em camelCase. Engines JavaScript modernas compilam uma regex uma vez e a executam tão rápido quanto um loop apertado.

Este testador usa a implementação RegExp nativa da plataforma, então tudo que funciona aqui funciona também em tempo de execução em Node, Deno, Bun e todos os navegadores modernos. As flags g, i, m, s, u e y mudam a semântica de match; os grupos de captura (os parênteses no padrão) coletam substrings que você pode referenciar na substituição como $1, $2 etc.

Como usar esta ferramenta

  1. Escolha um modelo (e-mail, URL, IPv4…) ou digite seu próprio padrão no campo regex.
  2. Alterne os botões de flag (g, i, m, s, u, y) para afinar o casamento. Passe o mouse para uma descrição de cada flag.
  3. Edite a string de teste à direita — correspondências são destacadas ao vivo. A lista de matches abaixo mostra a posição, o match completo e os grupos de captura.
  4. Adicione uma string de substituição para pré-visualizar um replace global. Use $1, $2, $&, $` e $' como em String.prototype.replace.

Perguntas frequentes

Qual dialeto de regex é suportado?

Regex JavaScript / ECMAScript (a mesma engine contra a qual seu código vai rodar). Isso significa que lookbehinds, grupos nomeados (?<nome>…) e Unicode property escapes \p{…} funcionam todos. Funcionalidades exclusivas do PCRE como padrões recursivos não são suportadas.

Como casar um caractere especial literal como . ou ?

Escape com barra invertida: \., \?, \(, \). Dentro de uma classe de caracteres [.] o ponto já é literal, então [.?] casa um ponto literal ou um ponto de interrogação.

Qual a diferença entre quantificadores gananciosos e preguiçosos?

.* é ganancioso — agarra o máximo possível e então faz backtrack. .*? é preguiçoso — agarra o mínimo possível e então expande. Preguiçoso para casar conteúdo entre marcadores; ganancioso para casar linhas inteiras.

Por que meu padrão não casa nada na segunda vez?

Se você usa a flag global (g) e reutiliza o mesmo objeto RegExp, lastIndex avança após cada exec(). Resete com regex.lastIndex = 0, ou crie uma nova RegExp a cada chamada. Este testador reseta para você entre renders.

Minha regex e string de teste são enviadas para um servidor?

Não. Tudo roda no seu navegador via a engine RegExp nativa. Suas entradas nunca tocam nossos servidores, então o testador é seguro até com dados sensíveis como uma linha de log contendo tokens.

Casos de uso comuns

Onde recorrer a uma regex se paga em segundos.

Validar entrada de usuário

Um e-mail, um CEP, um número de telefone — uma regex apertada se escreve mais rápido que um parser e basta quando você só quer um sanity check antes de enviar os dados adiante.

Extrair dados de logs

Puxe request IDs, IPs ou status codes de um stream de logs sem parsear JSON. Grupos de captura te dão os campos diretamente.

Reescrever código em escala

Renomear uma função, mudar um estilo de aspas ou atualizar uma chamada de API depreciada numa codebase inteira pipando ripgrep no sed — ambos falam regex.

Buscar e substituir em editores

A maioria dos editores (VS Code, JetBrains, Vim) traz busca-e-substituição por regex. Teste o padrão aqui primeiro para evitar corromper um arquivo em massa.

Dicas e atalhos

Hábitos que mantêm regexes manuteníveis.

Ancore quando puder

Se um valor deve ocupar um campo inteiro, ancore com ^ no começo e $ no fim. Sem âncoras, /\d+/ também casa dentro de 'abc123def' — geralmente não é o que você quer para validação.

Prefira classes de caracteres à alternação

[abc] é mais rápido e mais claro que (a|b|c). Use alternação só quando as alternativas têm múltiplos caracteres.

Comente com a flag x se disponível

JavaScript não tem a flag verbose, mas você pode construir o padrão a partir de um literal de string distribuído em várias linhas e juntá-lo. Para padrões complexos, esse é um ganho de legibilidade muito maior que uma megalinha.

Quando regex é a ferramenta errada

Não tente parsear HTML, JSON ou qualquer coisa com estrutura aninhada. Use um parser de verdade (DOMParser, JSON.parse, uma AST). Regex brilha em padrões textuais planos, não em dados estruturados em árvore.

Ferramentas relacionadas