Expressões Regulares em JavaScript com Exemplos: na Prática
\n\nExpressões regulares (RegExp) são uma ferramenta poderosa para busca, substituição e validação de texto. Em JavaScript, especialmente no ambiente Node.js, elas são amplamente utilizadas: desde a análise de logs até a validação de formulários. Neste artigo, vamos abordar a sintaxe, os métodos e escrever exemplos práticos que você poderá usar imediatamente em seus projetos.
\n\n1. Fundamentos da Sintaxe e Criação de RegExp
\n\nEm JavaScript, uma expressão regular pode ser criada de duas formas: literal e construtor. O literal é conveniente para padrões estáticos, o construtor para padrões dinâmicos.
\n\n// Literal (recomendado)\nconst regexLiteral = /hello/gi;\n\n// Construtor (para padrões dinâmicos)\nconst pattern = "hello";\nconst flags = "gi";\nconst regexConstructor = new RegExp(pattern, flags);\n\nFlags (modificadores):
\n- \n
g— busca global (encontra todas as correspondências, não apenas a primeira) \n i— busca insensível a maiúsculas/minúsculas \n m— modo multilinha (as âncoras^e$funcionam para cada linha) \n s— permite que o ponto.corresponda ao caractere de nova linha \n u— ativa suporte completo a Unicode \n
Metacaracteres básicos:
\n- \n
.— qualquer caractere, exceto nova linha \n \\d— dígito (0-9) \n \\w— letra, dígito ou sublinhado \n \\s— caractere de espaço em branco (espaço, tabulação, quebra de linha) \n ^— início da linha \n $— fim da linha \n []— classe de caracteres (exemplo[a-z]— todas as letras minúsculas) \n ()— grupo de captura \n |— OU lógico \n
2. Principais Métodos para Trabalhar com Expressões Regulares
\n\nEm JavaScript, existem vários métodos que funcionam com RegExp. Vamos analisá-los com exemplos práticos.
\n\n2.1. test() — verificação de correspondência
\nO método retorna true ou false. Ideal para validação.
const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\nconst emails = ["user@example.com", "invalid-email", "test@domain.co.uk"];\n\nemails.forEach(email => {\n console.log(`${email}: ${emailPattern.test(email)}`);\n});\n// user@example.com: true\n// invalid-email: false\n// test@domain.co.uk: true\n\n2.2. exec() — busca com detalhes
\nRetorna um array com a correspondência e grupos de captura. Útil para extrair dados.
\n\nconst logLine = "ERROR: 2023-10-15 14:30:00 - Server crash";\nconst logPattern = /^(ERROR|WARN|INFO): (\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}) - (.+)$/;\nconst result = logPattern.exec(logLine);\n\nif (result) {\n console.log(`Nível: ${result[1]}`);\n console.log(`Data: ${result[2]}`);\n console.log(`Mensagem: ${result[3]}`);\n}\n// Nível: ERROR\n// Data: 2023-10-15 14:30:00\n// Mensagem: Server crash\n\n2.3. match() — busca em string
\nMétodo de string que retorna um array de correspondências. Com a flag g — todas as correspondências, sem — a primeira com grupos.
const text = "Tel: +7(999)123-45-67, +7(495)765-43-21";\nconst phonePattern = /\\+7\\(\\d{3}\\)\\d{3}-\\d{2}-\\d{2}/g;\nconst phones = text.match(phonePattern);\n\nconsole.log(phones);\n// ['+7(999)123-45-67', '+7(495)765-43-21']\n\n2.4. replace() — substituição de texto
\nPermite substituir correspondências por uma nova string. Suporta caracteres especiais, como $1 para grupos de captura.
const messyDate = "2023/10/15";\nconst cleanDate = messyDate.replace(/(\\d{4})\\/(\\d{2})\\/(\\d{2})/, "$3.$2.$1");\nconsole.log(cleanDate); // 15.10.2023\n\n