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
/flagsexibido 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
[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.*, +, ?) 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.