Folha de referência de expressões regulares: sintaxe, flags e padrões comuns
Resposta rápida
Uma regex combina caracteres literais, metacaracteres (., \d, \w, \s), quantificadores (*, +, ?, {n,m}), âncoras (^, $, \b) e grupos ((...), [...]). Sinalizadores como g (global), i (sem distinção entre maiúsculas e minúsculas), m (multilinhas) alteram o comportamento de correspondência. Os padrões de teste vivem com nosso Regex Tester antes de incorporá-los no código.
Introdução
Expressões regulares (regex) descrevem padrões de texto usando uma linguagem formal compacta. Eles são suportados por todas as linguagens de programação, editores e ferramentas de pesquisa modernas. Esta folha de dicas é uma referência para a sintaxe definida pelo ECMAScript (usado pelo JavaScript), além de padrões comuns que você pode copiar e adaptar. Use nosso testador Regex para testar qualquer padrão em um texto de amostra em seu navegador.
Passo a passo
-
Classes de personagens —correspondem a um conjunto de caracteres
[abc] corresponde a a, b ou c. [^abc] corresponde a qualquer coisa, exceto a, b, c. [a-z] corresponde a qualquer letra minúscula. Classes predefinidas: \d = [0-9], \D = sem dígito, \w = [A-Za-z0-9_], \W = sem palavra, \s = espaço em branco, \S = sem espaço em branco, . = qualquer caractere exceto nova linha (use o sinalizador s para incluir nova linha).
-
Quantificadores — quantas vezes repetir
* = 0 ou mais. + = 1 ou mais. ? = 0 ou 1. {n} = exatamente n. {n,} = pelo menos n. {n,m} = entre n e m. Adicionar ? para correspondência lenta (por exemplo, *? corresponde ao mínimo possível). Ganancioso é o padrão e pode causar retrocesso catastrófico em padrões aninhados.
-
Âncoras e limites – onde combinar
^ corresponde ao início da string (ou linha com sinalizador m). $ corresponde ao final. \b corresponde a um limite de palavra (entre \w e \W). \B corresponde a um limite que não é de palavra. As âncoras têm largura zero – elas testam a posição sem consumir caracteres.
-
Grupos e alternância
(abc) é um grupo de captura; use $ 1, $ 2 em substituições. (?:abc) é um grupo sem captura. (?=abc) é um lookahead (afirma o que se segue). (?!abc) é uma previsão negativa. (?<=abc) é um lookbehind (ES2018+). a|b é alternância (a ou b).
-
Sinalizadores —alterar comportamento de correspondência
g = global (encontre todas as correspondências, não apenas a primeira). i = não diferencia maiúsculas de minúsculas. m = multilinha (^ e $ correspondem aos limites da linha). s = dotAll (. corresponde à nova linha). u = unicode (trate o padrão como pontos de código Unicode; necessário para emoji e caracteres astrais). y = sticky (corresponde apenas a lastIndex).
Exemplos
Combine um endereço de e-mail (prático, RFC 5322 simplificado)
Entrada: Pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/
Saída: Corresponde a 'user@example.com' e 'a.b@sub.domain.co', mas não a 'plainaddress' ou '@no-user.com'
Extraia todos os códigos de cores hexadecimais de CSS
Entrada: Pattern: /#[0-9a-fA-F]{3,8}\b/g
Saída: In 'color: #fff; background: #1a2b3c4d' finds ['#fff', '#1a2b3c4d']
Validar uma data ISO 8601 (AAAA-MM-DD)
Entrada: Pattern: /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/
Saída: Corresponde a '2026-08-28', mas rejeita '2026-13-01' e '2026-02-31'
Substitua os dígitos por # usando um grupo de captura
Entrada: 'Pedido 42 enviado' substituído por /(\d+)/g →'#$1'
Saída: 'Pedido nº 42 enviado'
Problemas comuns
- Quantificadores gananciosos que correspondem demais: '<.*>' em '<a><b>' corresponde à string inteira '<a><b>' em vez de '<a>'. Use '<.*?>' (preguiçoso) para corresponder '<a>' primeiro.
- Retrocesso catastrófico: quantificadores aninhados como (a+)+b na entrada 'aaaaaaaaaaaaaaaa!' pode levar um tempo exponencial. Reescreva o padrão ou use grupos atômicos/quantificadores possessivos quando houver suporte.
- Esquecendo o sinalizador u para Unicode: /^.$/ corresponde a uma única unidade de código, então emoji como '😀' (duas unidades de código) falham sem o sinalizador u. Sempre adicione você ao combinar caracteres astrais.
- Confundir \b (limite de palavra) com \s (espaço em branco): \b corresponde entre um caractere de palavra e não-palavra, portanto também funciona no início/fim da string. \s corresponde apenas a caracteres de espaço em branco reais.
Dicas
- Sempre teste o regex em amostras correspondentes e não correspondentes em nosso Regex Tester antes de incorporá-lo no código de produção - casos extremos são fáceis de perder.
- Prefira classes de caracteres [a-z] em vez de alternância (a|b|...|z) para caracteres únicos — as classes são mais rápidas e claras.
- Use grupos sem captura (?:...) quando você não precisar do valor capturado - a captura tem um pequeno custo de desempenho e sobrecarrega a matriz de resultados.
- Compile regex uma vez com new RegExp() ou um literal no escopo do módulo, não dentro de um hot loop - recompilar o mesmo padrão em cada iteração desperdiça CPU.