Expresiones regulares en TypeScript: de la teoría a la práctica
\nLas expresiones regulares (RegExp) son una herramienta poderosa para buscar, reemplazar y validar cadenas. En TypeScript funcionan igual que en JavaScript, pero añaden tipado estricto, lo que simplifica la depuración y aumenta la fiabilidad del código. En este artículo analizaremos la sintaxis, los métodos y ejemplos reales de uso de expresiones regulares en TypeScript.
\n\nCreación de expresiones regulares en TypeScript
\nEn TypeScript existen dos formas de crear RegExp: literal y mediante el constructor. Ambas opciones están tipadas y devuelven un objeto de tipo RegExp.
Sintaxis literal
\nLa forma más sencilla y utilizada es encerrar el patrón entre barras inclinadas. Las banderas se indican después de la segunda barra.
\n// Búsqueda de la palabra "hello" sin distinción de mayúsculas/minúsculas\nconst pattern: RegExp = /hello/i;\nconsole.log(pattern.test('Hello World')); // true\n\nConstructor RegExp
\nEl constructor es útil cuando el patrón se forma dinámicamente. El primer argumento es una cadena con el patrón, el segundo son las banderas.
\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 principales de RegExp en TypeScript
\nTypeScript hereda todos los métodos de JavaScript para trabajar con expresiones regulares. Veamos los más populares.
\n\ntest() — comprobación de existencia
\nEl método test() devuelve true o false. Es útil para la validación de formularios.
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() — búsqueda detallada
\nexec() devuelve un array con la coincidencia, el índice y los grupos. Si no hay coincidencias, devuelve null.
const datePattern: RegExp = /(\\d{2})\\.(\\d{2})\\.(\\d{4})/;\nconst result: RegExpExecArray | null = datePattern.exec('Hoy es 15.03.2025');\nif (result) {\n console.log(`Día: ${result[1]}, Mes: ${result[2]}, Año: ${result[3]}`);\n // Día: 15, Mes: 03, Año: 2025\n}\n\nmatch() y matchAll() para cadenas
\nEl método match() se invoca en una cadena y recibe un RegExp. Para la búsqueda global de todas las coincidencias, 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() devuelve un iterador\nconst matches: IterableIterator<RegExpMatchArray> = text.matchAll(/(\\d+)/g);\nfor (const match of matches) {\n console.log(`Número encontrado: ${match[1]}`);\n}\n\nEjemplos prácticos de expresiones regulares en TypeScript
\nAhora apliquemos la teoría a tareas reales. Todos los ejemplos están escritos teniendo en cuenta el tipado estricto de TypeScript.
\n\nEjemplo 1: Validación de dirección de correo electrónico
\nCreemos una función que verifique la validez de un email. Usamos una expresión 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('invalid-email')); // false\n\nEjemplo 2: Extracción de números de una cadena
\nA menudo es necesario obtener todos los números de un texto. Usamos búsqueda global con la bandera 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('Precio: 2500 rub, descuento 300 rub');\nconsole.log(result); // [2500, 300]\n\