Saltar al contenido
AldeaCode Logo
Tester Regex / JavaScript Desarrollador 100% local

Tester regex para JavaScript: dialecto JS, sticky y, y Unicode v

El regex de JavaScript es su propio dialecto. A simple vista parece PCRE, pero las diferencias hacen tropezar: sin cuantificadores posesivos, sin recursión, sticky y tiene reglas de escaneo sutiles, y el flag v añadió en 2023 operaciones de conjunto realmente nuevas.

Lo que tiene el dialecto JS

El regex moderno de JavaScript cubre casi todo lo que necesitas. Lookahead y lookbehind están soportados en V8, JavaScriptCore y SpiderMonkey, incluido lookbehind de longitud variable. Las versiones antiguas de Safari anteriores a 16.4 no tenían lookbehind, así que si tu audiencia todavía incluye una cola larga de dispositivos iOS en versiones viejas, detecta la feature o haz polyfill.

Los capture groups con nombre llegaron en ES2018: (?\d{4}). El resultado del match los expone en match.groups. Las backreferences a grupos con nombre usan \k, y los strings de replace los referencian como $.

Lo que le falta al dialecto JS

Tres huecos que conviene conocer.

Sin recursión. PCRE soporta (?R) para subrutinas recursivas; JavaScript no. Patrones que tienen que matchear paréntesis anidados de profundidad arbitraria no se pueden escribir como una sola regex JS. Usa un parser.

Sin cuantificadores posesivos. PCRE tiene a*+ para evitar backtracking; JavaScript no. El truco es (?=(a*))\1 con lookahead y backreference, pero el coste de legibilidad es real, así que valora otro enfoque.

Sin grupos condicionales, sin grupos atómicos. Los dos existen en PCRE. Casi siempre se pueden reformular como alternativas con cuidado.

Flags que importan: y, u, v

Sticky y ancla el match en lastIndex y solo ahí. Combinado con exec en bucle, te permite tokenizar entrada eficientemente sin backtracking sobre caracteres anteriores. Distinto de g: g busca hacia delante desde lastIndex; y exige inicio exacto.

Unicode u activa el manejo correcto de code points. Sin él, . matchea una unidad de código UTF-16, partiendo emojis y caracteres del plano astral por la mitad. Con él, \p{Letter} y otros escapes de propiedad Unicode funcionan.

Unicode sets v (ES2024) es superconjunto de u. Añade operaciones de conjunto: intersección &&, sustracción -- y conjuntos de literales de string [\q{ab|cd}]. Úsalo cuando quieras expresar cosas como "letra que no sea griega" o "cualquiera de estas secuencias multicarácter".

match, matchAll, replaceAll con grupos nombrados

String.prototype.match devuelve el primer match (o todos si la regex tiene g). matchAll devuelve un iterador de objetos match completos, incluyendo capture groups, que es lo que sueles querer. replaceAll con regex requiere el flag g o lanza error. El ejemplo de abajo extrae fechas ISO, las sustituye usando referencias a grupos nombrados, y lista todos los matches para inspección.

Ejemplo completo

javascript
const text = "Lanzado 2024-03-15 y 2025-01-08, auditoría el 2026-05-10.";

const isoDate = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/g;

// Itera cada match con grupos nombrados
for (const m of text.matchAll(isoDate)) {
  const { year, month, day } = m.groups;
  console.log(`${day}/${month}/${year}`);
}

// Reemplaza usando back-references nombradas
const reformatted = text.replaceAll(isoDate, "$<day>/$<month>/$<year>");
console.log(reformatted);

// Flag sticky para tokenizar
const tokeniser = /\s*(\w+)/y;
tokeniser.lastIndex = 0;
const first = tokeniser.exec("hola mundo");
console.log(first[1]); // "hola"

¿Solo necesitas el resultado?

Cuando estás escribiendo una regex para un proyecto JS y quieres ver exactamente qué captura antes de pegarla en el código, el tester de regex en aldeacode.com corre el patrón con el mismo motor que usa el navegador. Activa los flags u y v, nombra tus grupos, ve los objetos match actualizarse en vivo. Sin pasar por un servidor, sin sorpresas cuando la regex llegue a producción.

Abrir Tester de Expresiones Regulares (JavaScript) →

Preguntas frecuentes

¿Conviene usar siempre el flag u?

Sí en cualquier patrón que toque texto del usuario. Sin u, los caracteres del plano astral se parten por la mitad y los escapes de propiedad Unicode no funcionan. El coste es despreciable y ganas correctitud real.

¿Cuándo prefiero v sobre u?

Cuando necesitas operaciones de conjunto o conjuntos de literales de string. v es superconjunto estricto, así que tus patrones u existentes funcionan bajo v sin cambios salvo que dependieran de algún caso límite. El soporte llegó a todos los motores entre 2023 y 2024.

¿Qué diferencia hay entre g e y en un bucle?

g avanza lastIndex pasado el match y sigue buscando hacia delante. y exige que el siguiente match empiece exactamente en lastIndex. y es lo que quieres al tokenizar una gramática conocida, g es lo que quieres al escanear prosa buscando ocurrencias.