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).

Escríbela sin las barras que la rodean, p. ej. \d+ en lugar de /\d+/. El patrón forma parte del enlace y se puede compartir; el texto de prueba, no.
Tus datos se guardan solo en este navegador.

El texto en el que se busca. Se queda en tu navegador y no se incluye en el enlace.

Tu texto se queda en tu navegador: no se envía, no se guarda y no aparece en la dirección de la página.

Resultado

Resultado
2 coincidencias
Coincidencias
N.ºÍndiceLongitudCoincidencia
126102026-09-27
258102026-10-15
Grupos por coincidencia
N.ºGrupoNombreValor
11jahr2026
12monat09
13tag27
21jahr2026
22monat10
23tag15
Patrón explicado
ElementoSignificado
(?<jahr>inicio del grupo 1, con nombre «jahr»
› \dun dígito del 0 al 9
› {4}el elemento anterior exactamente 4 veces
)fin del grupo
-el texto literal «-»
(?<monat>inicio del grupo 2, con nombre «monat»
› \dun dígito del 0 al 9
› {2}el elemento anterior exactamente 2 veces
)fin del grupo
-el texto literal «-»
(?<tag>inicio del grupo 3, con nombre «tag»
› \dun dígito del 0 al 9
› {2}el elemento anterior exactamente 2 veces
)fin del grupo
Como literal de JavaScript
/(?<jahr>\d{4})-(?<monat>\d{2})-(?<tag>\d{2})/g

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

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

Última actualización:

Herramientas relacionadas