Sintaxe de regex
A sintaxe completa em uma página, com o significado de cada símbolo e os padrões prontos que se usa sempre.
35 itens em 7 seções
Classes de caractere
.- Qualquer caractere, exceto quebra de linha (com a flag s, também a quebra)
\d \D- Dígito de 0 a 9; a maiúscula nega, ou seja, qualquer coisa que não seja dígito
\w \W- Letra, dígito ou sublinhado; a maiúscula nega
\s \S- Espaço, tabulação ou quebra de linha; a maiúscula nega
[abc] [^abc]- Um dos caracteres listados; com circunflexo dentro, qualquer um que não esteja na lista
[a-z0-9]- Intervalo: qualquer letra minúscula ou dígito
Quantificadores
*- Zero ou mais vezes
+- Uma ou mais vezes
?- Zero ou uma vez (torna opcional)
{3} {2,5} {2,}- Exatamente 3; entre 2 e 5; 2 ou mais
*? +? ??- Versão preguiçosa: casa o mínimo possível em vez do máximo
*+ ++- Possessivo: casa o máximo e não devolve; evita explosão de retrocesso
Âncoras e limites
^ $- Começo e fim do texto; com a flag m, de cada linha
\b \B- Limite de palavra; a maiúscula é o oposto, dentro de uma palavra
\A \z- Começo e fim absolutos do texto, ignorando a flag m (não existe em JavaScript)
Grupos
(abc)- Grupo de captura; vira $1 na substituição
(?:abc)- Agrupa sem capturar — use quando só precisa aplicar um quantificador
(?<nome>abc)- Grupo nomeado; recuperado por nome em vez de número
a|b- Alternativa: casa a ou b
\1- Retrovisor: repete o que o grupo 1 casou
Lookaround
(?=abc)- Lookahead positivo: exige que venha abc à frente, sem consumir
(?!abc)- Lookahead negativo: exige que não venha abc à frente
(?<=abc)- Lookbehind positivo: exige que abc venha antes
(?<!abc)- Lookbehind negativo: exige que abc não venha antes
Flags
g- Global: encontra todas as ocorrências, não só a primeira
i- Ignora maiúsculas e minúsculas
m- Multilinha: ^ e $ passam a valer por linha
s- Faz o ponto casar também a quebra de linha
u- Modo Unicode; necessário para \p{...} e para emoji
Padrões prontos
^\d{5}-?\d{3}$- CEP, com ou sem hífen
^\d{3}\.?\d{3}\.?\d{3}-?\d{2}$- CPF no formato, com ou sem pontuação (não valida o dígito)
^[A-Z]{3}\d[A-Z0-9]\d{2}$- Placa Mercosul
^\(?\d{2}\)?\s?9?\d{4}-?\d{4}$- Telefone brasileiro com DDD, fixo ou celular
^[^@\s]+@[^@\s]+\.[^@\s]{2,}$- E-mail em verificação prática — a regex completa da RFC é impraticável
^#?([\da-f]{3}|[\da-f]{6})$- Cor hexadecimal de 3 ou 6 dígitos
Perguntas frequentes
- Por que minha regex fica lenta em textos grandes?
- Quase sempre é retrocesso catastrófico: quantificadores aninhados como (a+)+ fazem o motor testar um número explosivo de combinações. Troque por classes mais específicas ou use quantificadores possessivos onde a linguagem oferecer.
- Quando usar grupo sem captura?
- Sempre que o grupo existir só para agrupar. Grupos de captura ocupam posição na numeração e custam memória; (?:...) deixa a expressão mais rápida e a numeração mais previsível.
- Dá para validar CPF com regex?
- Só o formato. O dígito verificador exige aritmética, que regex não faz. O padrão confere a máscara e o cálculo fica no código — ou no validador de CPF do site.