Padrões prontos — clique para usar
Guia de Expressões Regulares para desenvolvedores: do básico ao avançado
Expressões regulares (Regex ou RegExp) são sequências de caracteres que formam um padrão de busca. São uma das ferramentas mais poderosas e versáteis na caixa de ferramentas de qualquer desenvolvedor — usadas para validação de dados, parsing de texto, transformações, extração de informações e muito mais. Presentes em praticamente todas as linguagens de programação, regex é uma habilidade que vale a pena dominar.
Referência rápida de metacaracteres regex
| Padrão |
Significado |
Exemplo |
Match |
| . |
Qualquer caractere exceto newline |
a.c |
abc, aXc, a3c |
| \d |
Dígito (0-9) |
\d{4} |
2024, 1234 |
| \w |
Letra, dígito ou _ |
\w+ |
hello, abc123 |
| \s |
Espaço, tab, newline |
\s+ |
" " " \t" |
| ^ |
Início da string/linha |
^Hello |
Hello World (início) |
| $ |
Fim da string/linha |
mundo$ |
Olá mundo (fim) |
| [abc] |
Classe de caracteres |
[aeiou] |
Vogais: a, e, i, o, u |
| [^abc] |
Negação de classe |
[^\d] |
Tudo que não é dígito |
| a* |
0 ou mais repetições |
\d* |
Qualquer sequência de dígitos |
| a+ |
1 ou mais repetições |
\d+ |
Pelo menos 1 dígito |
| a? |
0 ou 1 ocorrência |
colou?r |
color ou colour |
| {n,m} |
Entre n e m repetições |
\d{2,4} |
12, 123, 1234 |
| (abc) |
Grupo de captura |
(\d+)-(\d+) |
12-34 (groups: 12, 34) |
| a|b |
Alternativa (OR) |
cat|dog |
cat ou dog |
| (?:abc) |
Grupo sem captura |
(?:https?):// |
http:// ou https:// |
| (?=abc) |
Lookahead positivo |
\d+(?= anos) |
"30" em "30 anos" |
Perguntas frequentes — Regex
Qual regex para validar e-mail?▼
A regex mais usada: /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/ — funciona para 99% dos casos práticos. A regex 100% correta para RFC 5322 é extremamente complexa e raramente necessária. Para validação robusta, combine regex básica + DNS lookup para verificar o domínio.
Como validar telefone brasileiro com regex?▼
Celular (com 9): /^\(?[1-9]{2}\)?\s?9[0-9]{4}-?[0-9]{4}$/ — aceita (11)99999-8888, 11999998888 etc. Fixo: /^\(?[1-9]{2}\)?\s?[2-8][0-9]{3}-?[0-9]{4}$/. Para aceitar ambos: /^\(?[1-9]{2}\)?\s?[2-9][0-9]{3,4}-?[0-9]{4}$/
Como validar CEP com regex?▼
Formato com traço: /^\d{5}-\d{3}$/ — aceita 01310-100. Sem traço: /^\d{8}$/. Para aceitar ambos: /^\d{5}-?\d{3}$/.
Qual regex para validar URL?▼
Uma regex prática (não 100% RFC): /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&\/=]*)$/. Para uso em produção, prefira a classe URL do JavaScript: try { new URL(str); return true; } catch { return false; }
Como substituir texto com regex em JavaScript?▼
str.replace(/padrão/g, "substituto"). Para grupos de captura: str.replace(/(\d{2})\/(\d{2})\/(\d{4})/, "$3-$2-$1") converte DD/MM/AAAA para AAAA-MM-DD. Para substituição complexa com função: str.replace(/\d+/, n => n*2) dobra cada número encontrado.
O que são flags de regex e quais são as mais importantes?▼
g (global): encontra todos os matches, não para no primeiro. i (case-insensitive): ignora maiúsculas/minúsculas. m (multiline): ^ e $ correspondem ao início/fim de cada linha. s (dotAll): o ponto corresponde também a newlines. u (unicode): suporte completo a Unicode. v (unicodeSets, ES2024): conjuntos de caracteres avançados.
Como evitar ReDoS (regex denial of service)?▼
ReDoS ocorre quando uma regex com backtracking excessivo (como /(a+)+$/) trava ao processar entradas maliciosas. Evite: grupos aninhados com quantificadores (/(a*)+/), alternativas que se sobrepõem (/(a|aa)+/). Use ferramentas como safe-regex (npm) para detectar padrões vulneráveis. Implemente timeout de execução.
Qual a diferença entre .test() e .match() em JavaScript?▼
regex.test(str) retorna boolean — mais rápido para simples verificação de existência. str.match(regex) retorna array com os matches e grupos de captura, ou null. Use .test() para validação, .match() ou .matchAll() quando precisar extrair os valores encontrados.
Como usar regex para parsear logs de servidor?▼
Defina grupos de captura para cada campo do log. Para Apache access log: /^(\S+)\s+\S+\s+(\S+)\s+\[(.+?)\]\s+"(.+?)"\s+(\d{3})\s+(\d+)/. Os grupos capturam: IP, usuário, data, requisição, status code, tamanho. Use .exec() ou .matchAll() para processar linha por linha.
Regex em banco de dados: como usar REGEXP no MySQL e PostgreSQL?▼
MySQL: WHERE coluna REGEXP "padrão" — usa POSIX ERE. PostgreSQL: WHERE coluna ~ "padrão" (case-sensitive) ou ~* "padrão" (case-insensitive). Para negação: !~ e !~*. No PostgreSQL, a função regexp_replace() e regexp_matches() oferecem funcionalidades avançadas. Note que a syntax varia entre databases.