Testador de expressões regulares

Digite um padrão de expressão regular e um texto de teste para destacar as correspondências e listar os valores dos grupos de captura. Compatível com as flags g/i/m/s/u usando o RegExp nativo do JavaScript.

Padrões de expressões regulares comuns

Uso Padrão Descrição
Endereço de e-mail ^[\w.+-]+@[\w-]+\.[\w.-]+$ Corresponde a um formato simplificado de e-mail composto por um nome de usuário e um domínio separados por @ (não totalmente compatível com a RFC).
Telefone celular (Brasil) ^\(?\d{2}\)?\s?9\d{4}-?\d{4}$ Corresponde a números de celular brasileiros com DDD de 2 dígitos e nono dígito, com ou sem parênteses e hífen.
URL https?:\/\/[\w.-]+(?:\/[\w\-./?%&=]*)? Extrai strings de URL que começam com http:// ou https://, incluindo caminho e parâmetros de consulta.
CEP ^\d{5}-?\d{3}$ Corresponde ao CEP brasileiro no formato de 5 dígitos, hífen opcional e mais 3 dígitos (ex.: 01310-100).
Código de cor hexadecimal ^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$ Corresponde a cores hexadecimais do CSS no formato completo #RRGGBB ou abreviado #RGB.
Somente dígitos ^[0-9]+$ Verifica se a string inteira é composta apenas por dígitos (0-9).

Dicas

  • O /flags exibido ao lado do campo de padrão permite ver rapidamente qual combinação de flags está ativa no momento.
  • Somente as partes entre () contam como grupos de captura. Use um grupo não capturante (?:...) se só precisar agrupar uma condição sem poluir a lista de grupos.
  • Sem a flag g, apenas a primeira correspondência é encontrada. Ative-a se quiser contar todas as ocorrências no texto.
  • O botão "Inserir exemplo" carrega um caso de extração de e-mail, um bom ponto de partida para entender como os grupos de captura se comportam.
  • Todo o processamento acontece inteiramente no seu navegador — o padrão e o texto de teste digitados nunca são enviados a nenhum servidor.

Perguntas frequentes

Sem a flag g (global), a expressão regular corresponde apenas à primeira ocorrência na string, e as demais são ignoradas. Ative a flag g se quiser encontrar todas as correspondências.

A sintaxe básica ([abc], \d, +, * etc.) é, em grande parte, compartilhada, mas a sintaxe de grupos nomeados, o suporte a lookahead/lookbehind e as flags disponíveis variam sutilmente entre as linguagens. Esta ferramenta segue a especificação RegExp do JavaScript, portanto não garante comportamento idêntico em outras linguagens.

Não. Todo o processamento ocorre no JavaScript do seu navegador, e nada do que você digita é enviado ou armazenado nos servidores do toolbase.cc.

Isso ocorre sempre que o construtor RegExp do JavaScript detecta um erro de sintaxe — por exemplo, um parêntese não fechado, um quantificador (*, +, ?) sem nada antes dele, ou uma classe de caracteres inválida. A mensagem de erro costuma dar uma dica, então verifique o balanceamento dos parênteses e o escape de caracteres especiais (como \. ou \().
ツールくん

Curiosidade — O que acontece dentro de um mecanismo de expressões regulares

As expressões regulares remontam à teoria das "linguagens regulares" proposta pelo matemático Stephen Kleene na década de 1950. Ferramentas Unix pioneiras, como o editor de texto ed e o comando grep (abreviação de "globally search a Regular Expression and Print"), adotaram essa teoria como implementação prática, o que explica a rápida disseminação do conceito nas ferramentas de processamento de texto. O próprio nome "grep" vem de uma operação de expressão regular, algo bastante simbólico.

O motor RegExp do JavaScript realiza a correspondência internamente usando uma estratégia chamada backtracking: testa cada elemento do padrão em ordem e, se uma parte posterior falhar, recua e tenta outra alternativa. Essa flexibilidade tem um custo: padrões como (a+)+b combinados com uma string longa que não corresponde podem fazer o número de tentativas crescer exponencialmente, fenômeno conhecido como "backtracking catastrófico", capaz de travar um navegador ou servidor. Sempre teste padrões complexos com diversas entradas antes de usá-los em produção.

Um objeto de expressão regular com a flag global (g) mantém internamente um cursor chamado lastIndex, e cada chamada a exec() retoma a busca a partir dessa posição. Reutilizar o mesmo objeto de expressão regular em buscas não relacionadas pode deixar esse cursor em um estado inesperado, por isso esta ferramenta cria uma nova instância de RegExp a cada vez, evitando que esse estado residual seja carregado.

Grupos de captura nomeados ((?<nome>...)) foram adicionados no ECMAScript 2018 e são um recurso relativamente novo. Referenciar um grupo pelo nome em vez do número melhora muito a legibilidade de padrões complexos — especialmente útil ao analisar datas, onde saber o que cada grupo representa é importante.

→ Ver todas as curiosidades