Uma expressão regular (regex) é uma forma compacta de descrever um padrão de texto: não uma string específica, mas uma regra que uma string deve seguir. Em vez de percorrer caracteres num loop, é possível verificar ou encontrar uma estrutura complexa com uma única expressão.
Blocos de construção básicos
- Classes de caracteres —
\d(dígito),\w(letra/dígito/sublinhado),\s(espaço em branco), ou uma classe personalizada como[a-zA-Z]. - Quantificadores —
*(0 ou mais),+(1 ou mais),?(0 ou 1),{2,5}(de 2 a 5 vezes). - Grupos de captura — parênteses
(...)marcam uma parte da correspondência que pode ser usada separadamente depois, por exemplo numa substituição. - Âncoras —
^e$prendem um padrão ao início ou fim de uma linha.
Por que \w falha com "coração"
No motor de expressões regulares do JavaScript, usado por esta ferramenta, \w sempre significa apenas [A-Za-z0-9_] — letras sem acento, dígitos e sublinhado. Por isso /^\w+$/.test('coração') retorna false: o ç e o ã quebram a correspondência. Ativar a flag u não resolve, porque, ao contrário do Python, o \w do JavaScript nunca se torna consciente de Unicode. A forma correta é /^\p{L}+$/u, a classe de propriedade Unicode que reconhece qualquer letra de qualquer alfabeto, acentuada ou não.
Correspondência gulosa vs preguiçosa
Por padrão, os quantificadores são "gulosos" — tentam capturar o máximo de caracteres possível, recuando só se isso impedir uma correspondência. Por exemplo, <.+> em <a>texto</a> capturaria tudo do primeiro < até o último >. Adicionar ? depois de um quantificador (<.+?>) o torna "preguiçoso" — captura o mínimo possível, parando na primeira correspondência válida.
Para que serve
- Validar o formato de dados de entrada (email, número de telefone, CEP).
- Buscar e substituir texto em massa com base num padrão, não numa correspondência exata.
- Extrair dados estruturados de logs ou texto não estruturado.
Backtracking catastrófico
Quantificadores aninhados como (a+)+ podem, em certas strings de entrada, forçar o mecanismo de regex a percorrer uma quantidade exponencial de combinações antes de concluir que não há correspondência — a página ou o servidor "trava" numa expressão aparentemente simples. Essa é uma vulnerabilidade real (ReDoS), por isso quantificadores aninhados complexos devem ser testados com strings longas "quase correspondentes", não apenas com os exemplos esperados.