Introdução às Expressões Regulares em JavaScript
Expressões regulares (regex ou regexp) são uma ferramenta poderosa para buscar, substituir e validar strings com base em um padrão definido. Em JavaScript (e Node.js), elas são implementadas através do objeto nativo RegExp.
Para um iniciante, a sintaxe do regex pode parecer assustadora, mas na verdade é apenas uma linguagem de descrição de padrões. Dominando as construções básicas, você poderá:
- Validar email, telefone, URL
- Extrair dados de texto (parsing)
- Substituir substrings por regras complexas
- Filtrar e processar entrada do usuário
Neste artigo, vamos abordar expressões regulares em JavaScript com exemplos em Node.js. Todos os exemplos podem ser executados no console ou em um ambiente de execução.
Criando uma Expressão Regular em JS
Em JavaScript, existem duas maneiras de criar um regex:
1. Sintaxe literal (recomendada)
const pattern = /hello/; // Procura a palavra "hello"O padrão é colocado entre duas barras. Após a barra de fechamento, você pode especificar flags (por exemplo, i — busca case-insensitive).
2. Construtor RegExp
const pattern = new RegExp('hello'); // Equivalente a /hello/Usado quando o padrão é dinâmico (formado a partir de uma variável).
Flags de Expressões Regulares
i— ignorar maiúsculas/minúsculas (/hello/iencontrará "Hello", "HELLO")g— busca global (encontra todas as correspondências, não apenas a primeira)m— modo multilinha (altera o comportamento das âncoras^e$)s— ponto corresponde ao caractere de nova linhau— suporte a Unicodey— busca aderente (busca apenas a partir da posição lastIndex)
const regex = /javascript/gi; // Procura "javascript" globalmente e sem diferenciar maiúsculas/minúsculasPrincipais Métodos para Trabalhar com Regex em JavaScript
Vamos analisar os principais métodos usados com expressões regulares.
test() — verificação de existência do padrão
Retorna true ou false. É o método mais rápido para validação.
const emailPattern = /^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,}$/i;console.log(emailPattern.test('user@example.com')); // trueconsole.log(emailPattern.test('invalid-email')); // falseexec() — busca com detalhes
Retorna um array com a correspondência e grupos. Com a flag g, lembra a posição.
const str = 'Preço: 100 reais, desconto: 20 reais';const pricePattern = /(\\d+)\\sreais/g;let match;while ((match = pricePattern.exec(str)) !== null) { console.log(`Encontrado: ${match[0]}, número: ${match[1]}`);}// Saída:// Encontrado: 100 reais, número: 100// Encontrado: 20 reais, número: 20match() — busca na string
Método da string. Sem a flag g, retorna a primeira correspondência (como exec). Com a flag g, retorna um array com todas as correspondências.
const text = 'JS é JavaScript, não confunda com Java.';const jsMatches = text.match(/Java\\w*/g);console.log(jsMatches); // ['JavaScript', 'Java']replace() — substituição por padrão
Substitui as correspondências por uma nova string. Suporta caracteres especiais ($1, $&).
const phone = '+55 (11) 98765-4321';const cleanPhone = phone.replace(/[\\s\\(\\)\\-]/g, '');console.log(cleanPhone); // +5511987654321
// Substituição usando gruposconst date = '2024-03-15';const reversed = date.replace(/(\\d{4})-(\\d{2})-(\\d{2})/, '$3.$2.$1');console.log(reversed); // 15.03.2024search() — índice da primeira correspondência
const index = 'Olá mundo'.search(/mundo/);console.log(index); // 4