Por que seu Regex não funciona: Modificadores, quebras de linha e caracteres de escape
Índice de conteúdo
- Diagnóstico direto: Por que um padrão válido não corresponde
- Modificadores essenciais: g, i, m e s (Não confunda m com s)
- Quantificadores gulosos (.*) vs. preguiçosos (.*?)
- Caracteres de Escape e a Armadilha da Barra Invertida (Contexto Literal vs Classe)
- Exemplos práticos testados no motor GoToolstack
- Diferenças de motor e prevenção de ReDoS
- Ferramentas GoToolstack para Desenvolvedores
- Referências técnicas e normas oficiais
1. Diagnóstico direto: Por que um padrão válido não corresponde
Uma expressão regular sem erros de sintaxe pode falhar em execução devido a modificadores ausentes, quebras de linha inesperadas ou caracteres de escape incorretos. Entenda as regras do interpretador antes de reescrever seu padrão.
Analise os quatro mecanismos principais em sequência:
2. Modificadores essenciais: g, i, m e s (Não confunda m com s)
Os modificadores governam a execução: g busca globalmente; i ignora maiúsculas; m faz ^ e $ reconhecerem cada linha; s permite que o ponto coincida com quebras de linha.

- g (Global): Faz a busca em todo o texto em vez de parar na primeira ocorrência.
- i (Ignorar maiúsculas): Ignora distinção entre letras maiúsculas e minúsculas.
- m (Multilinhas): Faz com que
^e$coincidam com o início e o fim de cada linha. - s (dotAll): Permite que o ponto (
.) coincida com quebras de linha (\n,\r).
DIFERENÇA CRUCIAL: O modificador multilinhas (m) NÃO permite que o ponto (.) salte quebras de linha! Do mesmo modo, o dotAll (s) não faz com que ^ ou $ coincidam em linhas individuais. Misturar m e s é a causa número um de erros.
3. Quantificadores gulosos (.*) vs. preguiçosos (.*?)
Por padrão, quantificadores são gulosos (greedy): consomem o maior número de caracteres possível antes de retroceder.
Ao isolar tags em: <div>A</div><div>B</div>
Padrão guloso <div>.*</div>: Abrange da primeira abertura ao último fechamento em uma única captura excessiva.
Padrão preguiçoso <div>.*?</div>: Interrompe a busca no primeiro fechamento encontrado, separando perfeitamente as tags.
4. Caracteres de Escape e a Armadilha da Barra Invertida (Contexto Literal vs Classe)
Expressões regulares reservam caracteres sintáticos: \ ^ $ . | ? * + ( ) [ { } ]. As regras de escape dependem do contexto:
- Fora de classes de caracteres: Todos os caracteres sintáticos exigem barra invertida (ex:
\.,\$) para busca literal. - Dentro de classes de caracteres (
[...]): A maioria dos metacaracteres perde a função especial e é tratada literalmente (ex:[.]casa ponto;[*]casa asterisco). Apenas^(negação no início),-(intervalo),](fechamento) e\(escape) retêm função sintática.
No código JavaScript, diferencie o literal do construtor:
// 1. Regex Literal (single backslash required)
const reLiteral = /^\d+\.\d+$/;
// 2. String Constructor (double backslash mandatory)
const reConstructor = new RegExp("^\\d+\\.\\d+$");5. Exemplos práticos testados no motor GoToolstack
Exemplos verificados com entradas reais no interpretador ECMAScript:
| Cenário e Entrada | Padrão e Modificadores | Correspondência Verificada |
|---|---|---|
ERROR 404 /api\nINFO 200 /home\nERROR 500 /db |
/^ERROR\s+(\d+)/gm |
ERROR 404, ERROR 500 |
Total cost: $49.99 USD |
/\$(\d+\.\d{2})/ |
$49.99 |
/* Multi-line |
/\/\*.*?\*\//s |
/* Multi-line |
6. Diferenças de motor e prevenção de ReDoS
O testador GoToolstack utiliza o motor local do seu navegador. Considere as seguintes fronteiras em relação ao PCRE ou Python:
- Lookbehind: Suporte moderno ES2018+
(?<=...)e(?<!...). - Sem quantificadores possessivos: Não há suporte para
.*+ou grupos atômicos no JS. - Ataques ReDoS: Expressões aninhadas como
(a+)+$travam a aba. O GoToolstack utiliza Web Workers com timeout automático. - Validação de emails: Expressões gigantescas para RFC 5322 são arriscadas. O recomendado é validação simples com envio de código de confirmação.
7. Ferramentas GoToolstack para Desenvolvedores
Valide e estruture expressões regulares no seu navegador sem envio para servidores externos:
Referências técnicas e normas oficiais
- MDN Web Docs: Guia de Expressões Regulares em JavaScript.
- ECMA-262: Especificação de Linguagem ECMAScript – Objetos RegExp.
- OWASP: Guia de Prevenção de ReDoS (Negação de Serviço).