Tema 12 · Lookaround

12. Aserciones Lookaround: Lookahead y Lookbehind Positivos y Negativos

Validaciones de ancho cero sin consumir caracteres: lookahead (?=...), (?!...) y lookbehind (?<=...), (?<!...) en JavaScript.

¿Qué es una Aserción Lookaround? (Ancho Cero)

Las aserciones lookaround permiten comprobar si un patrón está precedido o seguido por otro fragmento de texto, pero con una cualidad fundamental: son de ancho cero (zero-width); es decir, inspeccionan la cadena sin consumir caracteres ni avanzar el cursor de búsqueda.

Diagrama Técnico: Aserciones Lookaround en JavaScript

Diagrama 12.1: Cuadrantes de Lookaround en JavaScript: Inspección hacia adelante (Lookahead) y hacia atrás (Lookbehind).

Los 4 Tipos de Lookaround en JavaScript Moderno

Sintaxis Nombre Condición de Éxito
(?=patrón) Lookahead Positivo El texto que sigue coincide con el patrón.
(?!patrón) Lookahead Negativo El texto que sigue NO coincide con el patrón.
(?<=patrón) Lookbehind Positivo (ES2018+) El texto que antecede coincide con el patrón.
(?<!patrón) Lookbehind Negativo (ES2018+) El texto que antecede NO coincide con el patrón.

⚡ Validador de Contraseñas Fuertes y Extracción de Monedas

Combina múltiples lookaheads para validar contraseñas seguras en cualquier orden y utiliza lookbehinds para extraer importes numéricos limpios.

lookarounds-modernos.js
Solo lectura
// 1. Patrón Canónico de Contraseña Fuerte con Múltiples Lookaheads
// Reglas requeridas (en cualquier posición):
// - Al menos una letra minúscula: (?=.*[a-z])
// - Al menos una letra mayúscula: (?=.*[A-Z])
// - Al menos un dígito: (?=.*\d)
// - Al menos un símbolo especial: (?=.*[!@#$%^&*])
// - Longitud mínima de 8 caracteres: .{8,}
const patronPassword = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*]).{8,}$/;

const contraseñasPrueba = [
  "password123",        // Falta mayúscula y símbolo
  "Password123",        // Falta símbolo
  "P@ssword123",        // ✔ Cumple todas las reglas
  "Ab1!",               // Muy corta (< 8)
  "K!lopolis2026Secure" // ✔ Excelente
];

console.log("--- 1. Validación de Contraseñas con Lookahead ---");
contraseñasPrueba.forEach(pass => {
  console.log(`${pass.padEnd(20)} => ${patronPassword.test(pass) ? "✔ Fuerte" : "❌ Débil"}`);
});

// 2. Extracción de Precios con Lookbehind Positivo (?<=...)
console.log("\n--- 2. Extracción de Precios Limpios con Lookbehind ---");
const factura = "Servicio: $150.00 USD, Descuento: $20.00 USD, Total: $130.00 USD";

// Coincide con números decimales solo si tienen el símbolo '$' inmediatamente antes
const regexPrecio = /(?<=\$)\d+(?:\.\d{2})?/g;
const preciosLimpios = factura.match(regexPrecio);

console.log("Valores numéricos puros (sin el símbolo $):");
console.log(preciosLimpios); // ["150.00", "20.00", "130.00"]
Pruébalo tú mismo » Se abre en una nueva pestaña con ejecución en vivo
🧠
Mini-Quiz de Retención
Comprueba tu comprensión antes de pasar a la siguiente lección
1 Pregunta
Pregunta 1
¿Por qué la técnica de concatenar múltiples lookaheads (?=...) al inicio de una expresión (/^(?=...)(?=...)/) es ideal para validar contraseñas?
🦉
¿Tienes dudas con este tema?
Sócrates AI puede darte analogías y explicarte este código paso a paso.

🚀 ¿Quieres dominar Regex en JavaScript: Expresiones Regulares & RegExp y crear proyectos reales?

Aprende arquitectura limpia, desarrollo web moderno, buenas prácticas y despliegue en producción con nuestro Bootcamp Fullstack Developer con mentorías en vivo.

🏛️ Autoría y Propiedad Intelectual: Obra educativa original de David Amador para Kilopolis Academia (Solucionáticos), estructurada sobre las especificaciones y estándares abiertos del W3C, el estándar vivo de WHATWG y la documentación oficial de código abierto. © Todos los derechos reservados.