/ /
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.