10. Banderas (Flags): g, i, m, s (dotAll), u (Unicode) y v (ES2024)
Guía exhaustiva de modificadores: búsqueda global (g), case-insensitive (i), multilínea (m), punto total (s), Unicode (u) y set notation (v).
Las Banderas de Configuración del Motor RegExp
Las banderas (flags) se colocan al final del delimitador de cierre (ej: /patron/gims) y alteran globalmente las reglas de coincidencia del motor.
| Bandera | Nombre | Efecto Principal |
|---|---|---|
g |
Global | Busca todas las coincidencias posibles en lugar de detenerse en la primera. |
i |
Ignore Case | Ignora diferencias entre mayúsculas y minúsculas (a coincide con A). |
m |
Multiline | Hace que ^ y $ coincidan con el inicio y fin de cada línea individual (tras un \n). |
s |
dotAll (ES2018) | Permite que el metarácter punto (.) coincida también con saltos de línea (\n, \r). |
u |
Unicode | Trata la expresión regular como una secuencia de puntos de código Unicode reales (soporta emojis y pares subrogados). |
v |
unicodeSets (ES2024) | Evolución de u: habilita operaciones de conjuntos (diferencia --, intersección &&) en clases. |
y |
Sticky | Coincide únicamente en la posición exacta indicada por lastIndex (sin escanear hacia adelante). |
d |
hasIndices (ES2022) | Genera la propiedad indices con las posiciones [inicio, fin] de cada grupo capturado. |
⚡ Efectos Prácticos de las Banderas Modernas en JavaScript
Compara la captura multilínea, el comportamiento del punto con la bandera s (dotAll) y la detección de caracteres Unicode con la bandera u.
// 1. Bandera 'm' (Multilínea) vs comportamiento estándar
const textoLineas = `ID: 101 - Servidor Web
ID: 102 - Base de Datos
ID: 103 - Balanceador Nginx`;
// Sin 'm', ^ solo coincide con la primera línea
console.log("--- 1. Bandera 'm' (Multilínea) ---");
console.log("Sin 'm':", textoLineas.match(/^ID:\s*\d+/g)); // ["ID: 101"]
console.log("Con 'm':", textoLineas.match(/^ID:\s*\d+/gm)); // ["ID: 101", "ID: 102", "ID: 103"]
// 2. Bandera 's' (dotAll): El punto '.' incluye saltos de línea
const bloqueCodigo = `<div>
<p>Párrafo de prueba</p>
</div>`;
console.log("\n--- 2. Bandera 's' (dotAll) ---");
console.log("Sin 's' (falla con saltos):", bloqueCodigo.match(/<div>.*<\/div>/)); // null
console.log("Con 's' (abarca todo): ", bloqueCodigo.match(/<div>.*<\/div>/s) !== null); // true
// 3. Bandera 'u' (Unicode): Emojis y pares subrogados
const textoEmoji = "Bienvenido a Kilopolis 🚀📚🎯";
console.log("\n--- 3. Bandera 'u' (Unicode) ---");
// Un emoji ocupa 2 unidades UTF-16; sin 'u', clases como /^.$/ fallan
const regexEmoji = /\p{Extended_Pictographic}+/gu;
const emojisEncontrados = textoEmoji.match(regexEmoji);
console.log("Emojis extraídos:", emojisEncontrados);
Mini-Quiz de Retención
Comprueba tu comprensión antes de pasar a la siguiente lección¿Qué problema resuelve la bandera "s" (dotAll) introducida en ECMAScript 2018?
¿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.