Probar regex: tester de expresiones regulares
Escribe un patrón, elige los flags y pega tu texto de prueba: el tester de regex muestra cada coincidencia con su índice, el contenido de los grupos de captura numerados y con nombre y explica cada parte del patrón en lenguaje sencillo. La búsqueda usa el motor JavaScript de tu navegador (ECMAScript).
Cómo se calcula
Este tester de regex usa la variante JavaScript de las expresiones regulares, tal como la define el estándar ECMA-262 y la implementa tu navegador. Un patrón que funciona aquí funciona exactamente igual en String.prototype.match, matchAll, replace y RegExp.prototype.test, ya sea en Chrome, Firefox, Safari o Node.js.
Cómo leer el resultado
- Coincidencias: cada coincidencia con su índice (posición del carácter empezando en cero, contada en unidades UTF-16 como hace JavaScript: un emoji cuenta como 2) y su longitud. Los saltos de línea se muestran como ↵ y los tabuladores como ⇥.
- Grupos por coincidencia: lo que capturó cada par de paréntesis, tanto los grupos numerados
( )como los grupos con nombre(?<nombre> ). «No participó» significa que el grupo está en una alternativa que no se usó. Con el flagdtambién ves la posición de cada grupo. - Patrón explicado: cada elemento en lenguaje sencillo; las filas con sangría (›) están dentro de un grupo.
Los flags
g busca todas las coincidencias en lugar de solo la primera, i ignora mayúsculas y minúsculas, m hace que ^ y $ funcionen por línea y s permite que el punto reconozca saltos de línea. u trata los emojis y demás caracteres fuera del plano multilingüe básico como un solo carácter y activa propiedades Unicode como \p{L} (cualquier letra, incluidas á o ñ). v es la versión más reciente de u, con operaciones de conjuntos como [\p{L}--[a-z]]; u y v no se pueden combinar. y («sticky») solo encuentra coincidencias que van seguidas sin huecos.
Protección contra bucles infinitos y bloqueos
Patrones como a* o \b pueden producir coincidencias vacías. Igual que JavaScript, el tester avanza entonces un carácter (un punto de código completo con u/v), así que no hay bucle infinito. Se buscan como máximo 1000 coincidencias.
El peligro mayor es el backtracking catastrófico (ReDoS): cuantificadores anidados como (a+)+$ prueban un número exponencial de combinaciones en un texto que no coincide; 30 caracteres pueden mantener ocupado el motor durante minutos. Por eso la búsqueda se ejecuta en un hilo aparte en segundo plano y se detiene a los 2 segundos; la página sigue respondiendo. Evita también esos patrones en tu propio código, sobre todo con datos que introducen los usuarios.
Diferencias con otras variantes de regex
PCRE (PHP), Python, Java y .NET difieren en los detalles: JavaScript no tiene cuantificadores posesivos (a++), ni grupos atómicos, ni las anclas \A o \Z; \w solo abarca A–Z, a–z, 0–9 y el guion bajo. Para letras con tilde o la ñ, usa \p{L} con el flag u.
Tu texto de prueba no se envía, no se guarda y no se escribe en el enlace; solo el patrón y los flags.
Preguntas frecuentes
¿Cómo pruebo una expresión regular?
Escribe el patrón sin barras en el campo superior, marca los flags que necesites y pega tu texto. Todas las coincidencias se resaltan al instante en el texto y aparecen en una lista con su índice; debajo ves lo que capturó cada grupo.
¿Por qué \w no reconoce la ñ ni las letras con tilde?
En JavaScript, \w solo equivale a A–Z, a–z, 0–9 y _. Para letras de cualquier idioma, usa \p{L} con el flag u, p. ej. [\p{L}\d_]+ para una palabra como «año» o «canción».
¿Qué diferencia hay entre codicioso (greedy) y perezoso (lazy)?
Los cuantificadores codiciosos (*, +, {2,}) toman todo el texto posible; los perezosos, con un signo de interrogación detrás (*?, +?), el mínimo posible. En «<b>x</b>», <.+> reconoce la cadena entera y <.+?> solo «<b>».
¿Cómo le doy nombre a un grupo de captura?
Usa (?<nombre>…). En el código lo lees con match.groups.nombre, en un texto de reemplazo con $<nombre> y dentro del propio patrón con la referencia inversa \k<nombre>.
¿Por qué se detuvo mi búsqueda?
Tardó más de 2 segundos, normalmente por un backtracking catastrófico con cuantificadores anidados como (\w+)*. Simplifica el patrón: no anides cuantificadores, haz que las alternativas no sean ambiguas y ánclalo con ^ y $.
¿El resultado también vale para PHP o Python?
Con patrones sencillos suele valer, pero solo está garantizado para JavaScript. PHP (PCRE) y Python admiten sintaxis adicional, como cuantificadores posesivos o \A, y Python escribe tradicionalmente los grupos con nombre como (?P<nombre>…).
Fuentes y base legal
- ECMA-262 § 22.2: ECMA-262 – ECMAScript Language Specification, RegExp (Regular Expression) Objects
- MDN Web Docs – Regular expressions (Guide)
- MDN Web Docs – RegExp.prototype.flags
- MDN Web Docs – String.prototype.matchAll() (empty matches, lastIndex)
- OWASP – Regular expression Denial of Service (ReDoS)
Última actualización:
Herramientas relacionadas
- Formateador, validador y minificador de JSONValida JSON según la RFC 8259 con línea, columna y explicación clara del error. Formatea o minifica, ordena claves y copia. Funciona en tu navegador.
- Validador de XML y CSV onlineComprueba si tu XML está bien formado y valida CSV según la RFC 4180: errores con línea y columna, separador detectado y vista previa. Sin subir nada.
- Codificar y decodificar Base64Codifica y decodifica Base64 y Base64url con UTF-8 correcto, y también URL encode/decode (codificación por porcentaje). Errores claros, todo en tu navegador.
- Generador de hash: SHA-256, SHA-512, SHA-1, MD5Calcula hashes SHA-256, SHA-384, SHA-512, SHA-1 y MD5 de textos o archivos y verifica sumas de comprobación, en tu navegador, sin subir nada y gratis.
- Validar la sintaxis de direcciones de correoComprueba una o varias direcciones de correo según RFC 5321/5322: longitudes, dominio, dominios con acentos o ñ (Punycode). En local, sin enviar nada.
- Cuál es mi dirección IPMuestra al instante tu dirección IP pública, detecta si es IPv4 o IPv6 y explica la diferencia. Gratis: tu IP no se guarda.