Expressões Regulares para Iniciantes: Padrões que Realmente Fazem Sentido
Uma introdução amigável à sintaxe de regex, padrões comuns para validação e busca, e como testar expressões sem frustração.
Expressões regulares (regex) têm fama de ser ilegíveis. Mas assim que você aprende os blocos fundamentais, elas se tornam uma das ferramentas mais poderosas no arsenal de um desenvolvedor — desde validar entradas de usuário até pesquisar em arquivos de log.
O que é uma expressão regular?
Uma regex é um padrão que descreve um conjunto de strings. Você fornece ao motor de regex um padrão e uma string alvo; ele informa se (e onde) o padrão encontra correspondência.
const pattern = /hello/i;
pattern.test("Hello World"); // true
A flag /i torna a correspondência insensível a maiúsculas e minúsculas. As flags vêm após a / de fechamento em JavaScript.
Blocos fundamentais
| Símbolo | Significado | Exemplo | Corresponde a |
|---|---|---|---|
. |
Qualquer caractere (exceto nova linha) | h.t |
hat, hit, hot |
* |
Zero ou mais do anterior | ab*c |
ac, abc, abbc |
+ |
Um ou mais do anterior | ab+c |
abc, abbc (não ac) |
? |
Zero ou um do anterior | colou?r |
color, colour |
\d |
Qualquer dígito (0–9) | \d{3} |
123, 007 |
\w |
Caractere de palavra (letra, dígito, _) | \w+ |
hello, user_1 |
\s |
Espaço em branco (espaço, tab, nova linha) | \s+ |
corresponde a espaços |
^ |
Início da string | ^Hello |
Hello… |
$ |
Fim da string | world$ |
…world |
Classes de caracteres
Colchetes definem um conjunto de caracteres para correspondência:
[aeiou] — qualquer vogal
[A-Z] — qualquer letra maiúscula
[0-9a-f] — qualquer dígito hexadecimal
[^0-9] — qualquer coisa que NÃO seja um dígito
Grupos e alternância
Parênteses agrupam partes de um padrão, e | significa "ou":
(cat|dog)s? — corresponde a cat, cats, dog, dogs
(\d{3})-(\d{4}) — corresponde a 555-1234 e captura cada parte
Grupos capturados são úteis para extração — retirar números de telefone, datas ou IDs de textos bagunçados.
Padrões comuns do mundo real
E-mail (simplificado)
^[^\s@]+@[^\s@]+\.[^\s@]+$
Verifica a estrutura "algo @ algo . algo" — suficiente para validação no lado do cliente. Para uso em produção, verifique com uma checagem real de entrega de e-mail usando nosso Validador de E-mail.
URL
https?:\/\/[^\s/$.?#].[^\s]*
Corresponde a URLs com http e https. Para construir URLs válidas, veja o Construtor de URL & Query String.
Número de telefone (EUA)
\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}
Corresponde a formatos como (555) 123-4567, 555.123.4567 e 555-123-4567.
Data (AAAA-MM-DD)
\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])
Depurando regex
A melhor forma de aprender é testando de forma interativa. Cole seu padrão e uma string de exemplo no nosso Testador de Regex — ele destaca as correspondências em tempo real, exibe os grupos capturados e explica o que cada parte do seu padrão faz.
Escreva o padrão mais simples que resolva o seu problema. Regex "inteligente demais" é difícil de manter.
Armadilhas de desempenho
Backtracking catastrófico
Quantificadores aninhados como (a+)+b podem fazer o motor tentar um número exponencial de caminhos em entradas sem correspondência. Evite padrões em que os mesmos caracteres possam ser correspondidos por múltiplas partes da expressão.
Ancoragem economiza tempo
Se você sabe que seu padrão deve corresponder à string inteira, use ^ e $. Sem âncoras, o motor varre cada posição da string em busca de uma correspondência parcial.
Folha de referência rápida
. qualquer caractere
\d \D dígito / não-dígito
\w \W caractere de palavra / não-palavra
\s \S espaço em branco / não-espaço
[abc] conjunto de caracteres
[^abc] conjunto negado
(group) grupo de captura
(?:group) grupo sem captura
a{3} exatamente 3
a{2,5} entre 2 e 5
a*? a+? versões lazy (não-gulosas)
(?=ahead) lookahead positivo
(?!ahead) lookahead negativo
Regex é uma habilidade que se acumula. Comece com padrões simples, teste-os visualmente e aumente a complexidade somente quando necessário. Toda linguagem suporta regex — uma vez que você aprende a sintaxe, ela é portátil em qualquer lugar.