Expresiones regulares en JavaScript con ejemplos: en la práctica
\n\nLas expresiones regulares (RegExp) son una herramienta poderosa para buscar, reemplazar y validar texto. En JavaScript, especialmente en el entorno Node.js, se utilizan en todas partes: desde el análisis de registros hasta la validación de formularios. En este artículo, analizaremos la sintaxis, los métodos y escribiremos ejemplos prácticos que podrás usar de inmediato en tus proyectos.
\n\n1. Conceptos básicos de sintaxis y creación de RegExp
\n\nEn JavaScript, una expresión regular se puede crear de dos maneras: mediante un literal y mediante un constructor. El literal es conveniente para patrones estáticos, el constructor para patrones dinámicos.
\n\n// Literal (recomendado)\nconst regexLiteral = /hello/gi;\n\n// Constructor (para patrones dinámicos)\nconst pattern = "hello";\nconst flags = "gi";\nconst regexConstructor = new RegExp(pattern, flags);\n\nBanderas (modificadores):
\n- \n
g— búsqueda global (encuentra todas las coincidencias, no solo la primera) \n i— búsqueda sin distinción de mayúsculas y minúsculas \n m— modo multilínea (los anclajes^y$funcionan para cada línea) \n s— permite que el punto.coincida con el carácter de nueva línea \n u— habilita la compatibilidad completa con Unicode \n
Metacaracteres básicos:
\n- \n
.— cualquier carácter, excepto nueva línea \n \\d— dígito (0-9) \n \\w— letra, dígito o guión bajo \n \\s— carácter de espacio en blanco (espacio, tabulación, salto de línea) \n ^— inicio de línea \n $— fin de línea \n []— clase de caracteres (por ejemplo[a-z]— todas las letras minúsculas) \n ()— grupo de captura \n |— O lógico \n
2. Métodos principales para trabajar con expresiones regulares
\n\nEn JavaScript, hay varios métodos que funcionan con RegExp. Veámoslos con ejemplos prácticos.
\n\n2.1. test() — verificación de coincidencia
\nEl método devuelve true o false. Es ideal para validación.
const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\nconst emails = ["user@example.com", "invalid-email", "test@domain.co.uk"];\n\nemails.forEach(email => {\n console.log(`${email}: ${emailPattern.test(email)}`);\n});\n// user@example.com: true\n// invalid-email: false\n// test@domain.co.uk: true\n\n2.2. exec() — búsqueda con detalles
\nDevuelve un array con la coincidencia y los grupos de captura. Es útil para extraer datos.
\n\nconst logLine = "ERROR: 2023-10-15 14:30:00 - Server crash";\nconst logPattern = /^(ERROR|WARN|INFO): (\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}) - (.+)$/;\nconst result = logPattern.exec(logLine);\n\nif (result) {\n console.log(`Nivel: ${result[1]}`);\n console.log(`Fecha: ${result[2]}`);\n console.log(`Mensaje: ${result[3]}`);\n}\n// Nivel: ERROR\n// Fecha: 2023-10-15 14:30:00\n// Mensaje: Server crash\n\n2.3. match() — búsqueda en cadena
\nMétodo de cadena que devuelve un array de coincidencias. Con la bandera g — todas las coincidencias, sin ella — la primera con grupos.
const text = "Tel: +7(999)123-45-67, +7(495)765-43-21";\nconst phonePattern = /\\+7\\(\\d{3}\\)\\d{3}-\\d{2}-\\d{2}/g;\nconst phones = text.match(phonePattern);\n\nconsole.log(phones);\n// ['+7(999)123-45-67', '+7(495)765-43-21']\n\n2.4. replace() — reemplazo de texto
\nPermite reemplazar coincidencias con una nueva cadena. Admite caracteres especiales, como $1 para grupos de captura.
const messyDate = "2023/10/15";\nconst cleanDate = messyDate.replace(/(\\d{4})\\/(\\d{2})\\/(\\d{2})/, "$3.$2.$1");\nconsole.log(cleanDate); // 15.10.2023\n\n