Expresiones regulares en JavaScript con ejemplos: en la práctica
Las expresiones regulares (RegExp) son una herramienta poderosa para buscar, reemplazar y validar cadenas de texto. En JavaScript y Node.js se utilizan en todas partes: desde la validación de formularios hasta el análisis de registros. En este artículo, analizaremos los fundamentos de la sintaxis, los métodos más populares y resolveremos varios problemas prácticos.
1. Creación de una expresión regular
En JavaScript hay dos formas de crear una expresión regular:
- Notación literal (recomendada):
/patron/banderas - Constructor
new RegExp('patron', 'banderas')
Ejemplo:
// Notación literalconst regexLiteral = /hello/i;
// Constructor (útil cuando el patrón es dinámico)const pattern = 'hello';const regexConstructor = new RegExp(pattern, 'i');
console.log(regexLiteral.test('Hello World')); // trueconsole.log(regexConstructor.test('HELLO')); // true2. Métodos principales de RegExp y String
Para trabajar con expresiones regulares en JavaScript se utilizan dos tipos de métodos: los métodos del propio objeto RegExp y los métodos de las cadenas.
2.1 Método test()
Verifica si hay una coincidencia en la cadena. Devuelve true o false.
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;console.log(emailRegex.test('user@example.com')); // trueconsole.log(emailRegex.test('invalid-email')); // false2.2 Método exec()
Busca una coincidencia y devuelve un array con información detallada (o null). Es útil para extraer datos.
const str = 'Precio: 1500 rublos, descuento: 200 rublos';const priceRegex = /(\\d+)/g;let match;
while ((match = priceRegex.exec(str)) !== null) { console.log(`Número encontrado: ${match[1]}`);}// Salida:// Número encontrado: 1500// Número encontrado: 2002.3 Método de cadena match()
Funciona de manera similar a exec(), pero se llama desde la cadena.
const text = 'JavaScript — ¡es genial! JS se usa en todas partes.';const result = text.match(/JS/g);console.log(result); // [ 'JS', 'JS' ]2.4 Método de cadena replace()
Reemplaza las coincidencias encontradas por la cadena especificada o el resultado de una función.
const phone = '+7 (123) 456-78-90';const cleaned = phone.replace(/[\\s\\-\\(\\)\\+]/g, '');console.log(cleaned); // 71234567890
// Reemplazo usando grupos de capturaconst date = '2024-03-15';const formatted = date.replace(/(\\d{4})-(\\d{2})-(\\d{2})/, '$3.$2.$1');console.log(formatted); // 15.03.20242.5 Método de cadena search()
Devuelve el índice de la primera coincidencia o -1.
const sentence = 'Aprende JavaScript en PythonLib';const index = sentence.search(/javascript/i);console.log(index); // 83. Banderas y caracteres especiales: ejemplos prácticos
Las banderas modifican el comportamiento de la búsqueda. Las más populares:
g— búsqueda global (busca todas las coincidencias, no solo la primera).i— búsqueda sin distinción de mayúsculas y minúsculas.m— modo multilínea (los anclajes^y$funcionan en cada línea).
Ejemplo con la bandera m:
const multiLineText = `Primera líneasegunda líneaTercera línea`;
// Sin la bandera mconsole.log(multiLineText.match(/^segunda/)); // null
// Con la bandera mconsole.log(multiLineText.match(/^segunda/m)); // [ 'segunda' ]