Expresiones regulares en TypeScript: de la teoría a la práctica
Las expresiones regulares (regexp o regex) son una herramienta poderosa para buscar, reemplazar y validar cadenas según un patrón determinado. En TypeScript, al igual que en JavaScript, las expresiones regulares son una funcionalidad incorporada del lenguaje. Este artículo te ayudará a dominar la sintaxis, aprender a aplicar regex en la práctica y evitar errores típicos.
¿Qué es una expresión regular y cómo crearla en TypeScript?
Una expresión regular es una secuencia de caracteres que describe un patrón de búsqueda. En TypeScript existen dos formas de crear una expresión regular:
- Sintaxis literal:
/patrón/banderas - Constructor RegExp:
new RegExp('patrón', 'banderas')
La primera forma es conveniente para patrones estáticos, la segunda cuando el patrón se forma dinámicamente.
// Sintaxis literalconst emailPattern: RegExp = /^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/;
// Constructor RegExpconst dynamicPattern: string = "hello";const regexFromString: RegExp = new RegExp(dynamicPattern, "gi");
console.log(emailPattern.test("test@example.com")); // trueconsole.log(regexFromString.test("Hello world")); // trueMétodos principales para trabajar con expresiones regulares
En TypeScript están disponibles tres métodos clave para trabajar con regex. Veamos cada uno con ejemplos.
Método test() — verificación de coincidencia
Devuelve true o false. Ideal para validación.
const hasNumber: RegExp = /\\d+/;console.log(hasNumber.test("abc123")); // trueconsole.log(hasNumber.test("abc")); // falseMétodo exec() — búsqueda con detalles
Devuelve un array con la coincidencia e información adicional (índice, cadena original). Al usar la bandera g recuerda la posición de la última coincidencia.
const wordPattern: RegExp = /(\\w+)\\s(\\w+)/;const result = wordPattern.exec("Hello TypeScript");if (result) { console.log(`Coincidencia completa: ${result[0]}`); // Hello TypeScript console.log(`Primer grupo: ${result[1]}`); // Hello console.log(`Segundo grupo: ${result[2]}`); // TypeScript console.log(`Índice: ${result.index}`); // 0}Método match() — búsqueda de todas las coincidencias
Se llama sobre la cadena, no sobre la expresión regular. Con la bandera g devuelve un array de todas las coincidencias.
const text: string = "Precio: 100 rublos, descuento: 20 rublos";const prices: RegExp = /\\d+/g;const foundPrices: string[] | null = text.match(prices);console.log(foundPrices); // ['100', '20', '0']Sintaxis y símbolos de uso frecuente
Para escribir expresiones regulares efectivas, necesitas conocer los símbolos básicos y sus significados.
.— cualquier carácter excepto salto de línea\\d— dígito (equivalente a[0-9])\\w— letra, dígito o guión bajo ([a-zA-Z0-9_])\\s— cualquier carácter de espacio en blanco (espacio, tabulación, nueva línea)^— inicio de la cadena$— fin de la cadena*— 0 o más repeticiones+— 1 o más repeticiones?— 0 o 1 repetición (hace al cuantificador perezoso)[]— conjunto de caracteres (por ejemplo,[a-z]— todas las letras minúsculas)()— grupo de captura|— O lógico
// Ejemplos de uso de símbolosconst 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\