Expressões Regulares em TypeScript: da Teoria à Prática
\nExpressões regulares (RegExp) são uma ferramenta poderosa para busca, substituição e validação de strings. Em TypeScript, elas funcionam da mesma forma que em JavaScript, mas adicionam tipagem estrita, o que simplifica a depuração e aumenta a confiabilidade do código. Neste artigo, vamos abordar a sintaxe, os métodos e exemplos reais de uso de expressões regulares em TypeScript.
\n\nCriação de Expressões Regulares em TypeScript
\nEm TypeScript, existem duas formas de criar um RegExp: literal e através do construtor. Ambas as opções são tipadas e retornam um objeto do tipo RegExp.
Sintaxe Literal
\nA forma mais simples e frequentemente usada é colocar o padrão entre barras. As flags são indicadas após a segunda barra.
\n// Busca pela palavra "hello" sem diferenciar maiúsculas/minúsculas\nconst pattern: RegExp = /hello/i;\nconsole.log(pattern.test('Hello World')); // true\n\nConstrutor RegExp
\nO construtor é útil quando o padrão é formado dinamicamente. O primeiro argumento é uma string com o padrão, o segundo são as flags.
\nconst searchTerm: string = 'TypeScript';\nconst dynamicPattern: RegExp = new RegExp(searchTerm, 'gi');\nconsole.log('I love TypeScript and TypeScript is great'.match(dynamicPattern));\n// ['TypeScript', 'TypeScript']\n\nMétodos Principais do RegExp em TypeScript
\nTypeScript herda todos os métodos do JavaScript para trabalhar com regex. Vamos ver os mais populares.
\n\ntest() — Verificação de Existência
\nO método test() retorna true ou false. É útil para validação de formulários.
const emailRegex: RegExp = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\nconst email: string = 'user@example.com';\nconsole.log(emailRegex.test(email)); // true\n\nexec() — Busca Detalhada
\nexec() retorna um array com a correspondência, índice e grupos. Se não houver correspondência, retorna null.
const datePattern: RegExp = /(\\d{2})\\.(\\d{2})\\.(\\d{4})/;\nconst result: RegExpExecArray | null = datePattern.exec('Hoje é 15.03.2025');\nif (result) {\n console.log(`Dia: ${result[1]}, Mês: ${result[2]}, Ano: ${result[3]}`);\n // Dia: 15, Mês: 03, Ano: 2025\n}\n\nmatch() e matchAll() para Strings
\nO método match() é chamado na string e recebe um RegExp. Para busca global de todas as correspondências, use matchAll().
const text: string = 'Código 123, código 456, código 789';\nconst numbers: RegExpMatchArray | null = text.match(/\\d+/g);\nconsole.log(numbers); // ['123', '456', '789']\n\n// matchAll() retorna um iterador\nconst matches: IterableIterator<RegExpMatchArray> = text.matchAll(/(\\d+)/g);\nfor (const match of matches) {\n console.log(`Número encontrado: ${match[1]}`);\n}\n\nExemplos Práticos de Expressões Regulares em TypeScript
\nAgora vamos aplicar a teoria em problemas reais. Todos os exemplos foram escritos considerando a tipagem estrita do TypeScript.
\n\nExemplo 1: Validação de E-mail
\nVamos criar uma função que verifica a validade de um e-mail. Usamos uma expressão regular tipada.
\nfunction isValidEmail(email: string): boolean {\n const emailRegex: RegExp = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(email);\n}\n\nconsole.log(isValidEmail('test@mail.ru')); // true\nconsole.log(isValidEmail('email-invalido')); // false\n\nExemplo 2: Extração de Números de uma String
\nFrequentemente é necessário obter todos os números de um texto. Usamos busca global com a flag g.
function extractNumbers(text: string): number[] {\n const numberPattern: RegExp = /\\d+/g;\n const matches: RegExpMatchArray | null = text.match(numberPattern);\n return matches ? matches.map(Number) : [];\n}\n\nconst result: number[] = extractNumbers('Preço: 2500 reais, desconto 300 reais');\nconsole.log(result); // [2500, 300]\n\