Expressões Regulares em TypeScript: da teoria à prática
Expressões regulares (regexp ou regex) são uma ferramenta poderosa para buscar, substituir e validar strings com base em um padrão definido. Em TypeScript, assim como em JavaScript, expressões regulares são um recurso nativo da linguagem. Este artigo ajudará você a dominar a sintaxe, aprender a aplicar regex na prática e evitar erros comuns.
O que é uma expressão regular e como criá-la em TypeScript
Uma expressão regular é uma sequência de caracteres que descreve um padrão de busca. Em TypeScript, existem duas formas de criar uma expressão regular:
- Sintaxe literal:
/padrão/flags - Construtor RegExp:
new RegExp('padrão', 'flags')
A primeira forma é conveniente para padrões estáticos, a segunda quando o padrão é formado dinamicamente.
// Sintaxe literalconst emailPattern: RegExp = /^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/;
// Construtor RegExpconst dynamicPattern: string = "hello";const regexFromString: RegExp = new RegExp(dynamicPattern, "gi");
console.log(emailPattern.test("test@example.com")); // trueconsole.log(regexFromString.test("Hello world")); // truePrincipais métodos para trabalhar com expressões regulares
Em TypeScript, existem três métodos-chave para trabalhar com regex. Vamos analisar cada um deles com exemplos.
Método test() — verificação de correspondência
Retorna true ou false. Ideal para validação.
const hasNumber: RegExp = /\\d+/;console.log(hasNumber.test("abc123")); // trueconsole.log(hasNumber.test("abc")); // falseMétodo exec() — busca com detalhes
Retorna um array com a correspondência e informações adicionais (índice, string original). Ao usar a flag g, lembra a posição da última correspondência.
const wordPattern: RegExp = /(\\w+)\\s(\\w+)/;const result = wordPattern.exec("Hello TypeScript");if (result) { console.log(`Correspondência completa: ${result[0]}`); // Hello TypeScript console.log(`Primeiro grupo: ${result[1]}`); // Hello console.log(`Segundo grupo: ${result[2]}`); // TypeScript console.log(`Índice: ${result.index}`); // 0}Método match() — busca de todas as correspondências
É chamado na string, não na expressão regular. Com a flag g, retorna um array com todas as correspondências.
const text: string = "Preço: 100 reais, desconto: 20 reais";const prices: RegExp = /\\d+/g;const foundPrices: string[] | null = text.match(prices);console.log(foundPrices); // ['100', '20', '0']Sintaxe e caracteres frequentemente usados
Para escrever expressões regulares eficientes, é preciso conhecer os caracteres básicos e seus significados.
.— qualquer caractere, exceto quebra de linha\\d— dígito (equivalente a[0-9])\\w— letra, dígito ou sublinhado ([a-zA-Z0-9_])\\s— qualquer caractere de espaço em branco (espaço, tabulação, nova linha)^— início da string$— final da string*— 0 ou mais repetições+— 1 ou mais repetições?— 0 ou 1 repetição (torna o quantificador preguiçoso)[]— conjunto de caracteres (por exemplo,[a-z]— todas as letras minúsculas)()— grupo de captura|— OU lógico
// Exemplos de uso de caracteresconst phonePattern: RegExp = /^\\+?7?\\d{10}$/;console.log(phonePattern.test("+79161234567")); // true
const datePattern: RegExp = /^\\d{2}\\.\\d{2}\\.\\d{4}$/;console.log(datePattern.test("31.12.2023")); // true\