Introducción a las expresiones regulares en JavaScript
Las expresiones regulares (regex o regexp) son una herramienta poderosa para buscar, reemplazar y validar cadenas según un patrón determinado. En JavaScript (y Node.js) se implementan a través del objeto incorporado RegExp.
Para un principiante, la sintaxis de regex puede parecer intimidante, pero en realidad es solo un lenguaje para describir patrones. Una vez que domines las construcciones básicas, podrás:
- Validar correos electrónicos, teléfonos, URL
- Extraer datos de texto (análisis sintáctico)
- Reemplazar subcadenas según reglas complejas
- Filtrar y procesar la entrada del usuario
En este artículo, analizaremos expresiones regulares en JavaScript con ejemplos en Node.js. Todos los ejemplos se pueden ejecutar en la consola o en un entorno de ejecución.
Creación de una expresión regular en JS
En JavaScript, hay dos formas de crear una regex:
1. Sintaxis literal (recomendada)
const pattern = /hello/; // Busca la palabra "hello"El patrón se encierra entre dos barras diagonales. Después de la barra de cierre, se pueden especificar banderas (por ejemplo, i — búsqueda que no distingue entre mayúsculas y minúsculas).
2. Constructor RegExp
const pattern = new RegExp('hello'); // Equivalente a /hello/Se utiliza cuando el patrón es dinámico (se forma a partir de una variable).
Banderas de expresiones regulares
i— ignorar mayúsculas/minúsculas (/hello/iencontrará "Hello", "HELLO")g— búsqueda global (busca todas las coincidencias, no solo la primera)m— modo multilínea (cambia el comportamiento de los anclajes^y$)s— el punto coincide con el carácter de nueva líneau— soporte para Unicodey— búsqueda adhesiva (busca solo desde la posición lastIndex)
const regex = /javascript/gi; // Busca "javascript" globalmente y sin distinción de mayúsculas/minúsculasMétodos principales para trabajar con regex en JavaScript
Veamos los métodos clave que se utilizan con las expresiones regulares.
test() — verificación de la presencia del patrón
Devuelve true o false. Es el método más rápido para la validación.
const emailPattern = /^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,}$/i;console.log(emailPattern.test('user@example.com')); // trueconsole.log(emailPattern.test('invalid-email')); // falseexec() — búsqueda con detalles
Devuelve un array con la coincidencia y los grupos. Con la bandera g, recuerda la posición.
const str = 'Precio: 100 rublos, descuento: 20 rublos';const pricePattern = /(\\d+)\\srublos/g;let match;while ((match = pricePattern.exec(str)) !== null) { console.log(`Encontrado: ${match[0]}, número: ${match[1]}`);}// Salida:// Encontrado: 100 rublos, número: 100// Encontrado: 20 rublos, número: 20match() — búsqueda en una cadena
Método de cadena. Sin la bandera g, devuelve la primera coincidencia (como exec). Con la bandera g, devuelve un array de todas las coincidencias.
const text = 'JS es JavaScript, no lo confundas con Java.';const jsMatches = text.match(/Java\\w*/g);console.log(jsMatches); // ['JavaScript', 'Java']replace() — reemplazo según patrón
Reemplaza las coincidencias con una nueva cadena. Admite caracteres especiales ($1, $&).
const phone = '+7 (123) 456-78-90';const cleanPhone = phone.replace(/[\\s\\(\\)\\-]/g, '');console.log(cleanPhone); // +71234567890
// Reemplazo usando gruposconst date = '2024-03-15';const reversed = date.replace(/(\\d{4})-(\\d{2})-(\\d{2})/, '$3.$2.$1');console.log(reversed); // 15.03.2024search() — índice de la primera coincidencia
const index = 'Hola mundo'.search(/mundo/);console.log(index); // 6