Lição 3
Flags e modos de correspondência
Global, case-insensitive, multiline, dotAll e correspondência Unicode.
Flags mudam como o motor varre a entrada — não o que os caracteres significam. Em JavaScript, as flags aparecem após o / de fechamento ou como segundo argumento de new RegExp(pattern, flags).
Flags comuns (JavaScript)
| Flag | Nome | Efeito |
|---|---|---|
g | global | Encontra todas as correspondências, não só a primeira |
i | ignore case | A corresponde a a |
m | multiline | ^ e $ correspondem a limites de linha, não só aos extremos da string |
s | dotAll | . corresponde a caracteres de nova linha |
u | Unicode | \u{...} com consciência de Unicode e alguns property escapes |
y | sticky | Corresponde só em lastIndex (iteração avançada) |
Outras linguagens expõem switches parecidos (re.IGNORECASE, (?i), etc.) com nomes ligeiramente diferentes.
Correspondência global importa
Sem g, String.prototype.match e muitos loops com exec param na primeira ocorrência. Parsers de log e ferramentas de destaque quase sempre precisam de modo global — ou iteração explícita.
Cuidado com objetos RegExp com estado: uma regex global atualiza lastIndex. Reutilizar a mesma instância em strings não relacionadas pode pular correspondências se você não resetar lastIndex.
Arquivos de log multiline
Arquivos de log têm muitas linhas. Com m, ^ERROR corresponde a linhas que começam com ERROR, que é o que você geralmente quer. Sem m, ^ muitas vezes significa só o início do blob inteiro.
Combine com g para encontrar toda linha de erro em um texto colado.
DotAll e conteúdo colado
Entrada do usuário e strings JSON podem incluir \n. Por padrão . não cruza linhas; s (dotAll) permite que . as corresponda — útil para padrões “qualquer coisa até a tag de fechamento” quando você aceita o risco de over-matching.
Unicode e texto internacional
Nomes de usuário, cidades e slugs podem incluir letras não ASCII. A flag u habilita tratamento correto de pares substitutos e classes \p{...} no JavaScript moderno.
Sem consciência de Unicode, \w pode ignorar caracteres válidos em apps internacionalizados.
Conclusão
Quando um padrão “funciona em uma linha mas não no arquivo”, verifique as flags primeiro — especialmente g, m e s. Depois revise âncoras e greediness.