ToolActToolAct

Herramienta de Prueba Regex

Prueba y depura expresiones regulares con resaltado en tiempo real y generación de código

Expresión Regular
//g
Banderas
gglobal
iignore case
mmultiline
sdotAll
uunicode
Patrones Comunes
Texto de Prueba
Resultados0 coincidencias
Sin coincidencias

¿Qué es una Expresión Regular?

La herramienta Regex ayuda a escribir, probar y entender expresiones regulares. Una expresión regular describe patrones de texto para búsqueda, extracción, validación y reemplazo, como cadenas parecidas a emails, campos de logs, URLs, IDs, fechas o formatos repetidos. Un probador permite ver coincidencias, grupos de captura, flags y casos límite antes de usar el patrón en código, pipelines de datos o validación de formularios. Regex es potente, pero fácil de sobreestimar: un patrón puede coincidir de más o de menos, volverse lento con entradas grandes o manejar mal Unicode y reglas locales. Para parsers complejos, HTML o validación crítica suele ser más seguro usar una biblioteca especializada.

Cómo usar

Cómo usarlo

  1. Introduce tu patrón regex en el campo de entrada izquierdo
  2. Selecciona las banderas necesarias (ej., g para global, i para insensible a mayúsculas)
  3. Introduce el texto de prueba en el lado derecho
  4. Observa las coincidencias resaltadas y los detalles

Consejos de Regex

  • Prueba los patrones con ejemplos que coincidan y no coincidan para detectar más fácilmente expresiones demasiado amplias.
  • Ten cuidado con los cuantificadores anidados en textos largos; algunos patrones pueden volverse lentos debido al backtracking excesivo.

Casos de uso

Probar expresiones regulares de JavaScript en vivoIntroduce un patrón, elige las flags g, i, m, s y u, y prueba contra texto de ejemplo con coincidencias resaltadas. La sintaxis regex inválida se detecta inmediatamente, y las coincidencias globales de longitud cero se manejan sin bloquear el bucle. La retroalimentación en tiempo real hace que los ajustes iterativos sean más rápidos que ejecutar un script en la consola o reiniciar un editor cada vez que cambia el patrón.
Inspeccionar posiciones de coincidencia y grupos con nombreCada coincidencia lista su texto, posiciones de inicio y fin, y grupos de captura con nombre cuando existen. Esto es útil al refinar patrones de extracción para logs, validación de formularios, reglas de importación o scripts de limpieza de datos. El offset visible permite que el mismo patrón se inserte en un pipeline más amplio que ya rastrea posiciones de caracteres en el archivo fuente.
Convertir un patrón funcional en fragmentos de códigoAplica los ejemplos integrados para emails, URLs, IPs, fechas, colores, texto chino, números y espacios, luego genera fragmentos copiables para JavaScript, Python, Java, PHP o Go usando las flags seleccionadas donde cada lenguaje las soporta. Los fragmentos generados incluyen el patrón literal y el conjunto de flags de coincidencia, de modo que el comportamiento en tiempo de ejecución coincide con lo que se probó en la página.
Depurar backtracking catastrófico y coincidencias descontroladasPega un string largo o adversarial en el probador para exponer cuantificadores anidados como (a+)+ o .*foo.* que congelan el motor. Observa el conteo de coincidencias y los offsets por coincidencia; si la iteración se detiene o la memoria se dispara, simplifica con grupos atómicos, cuantificadores posesivos o ajustando anclas. Un buen patrón sobrevive a la peor entrada sin crecimiento exponencial.
Comparar cuantificadores greedy vs lazy, lookbehind y \p{L}Usa el probador para ver cómo los cuantificadores greedy (.*) y los cuantificadores lazy (.*?) eligen prefijos diferentes en el mismo texto, luego verifica el soporte de lookbehind (?<=) que está disponible en JavaScript y PCRE pero no en todos los motores antiguos. Activa la flag u para usar clases de propiedad Unicode como \p{L} (cualquier letra) y \p{Sc} (símbolo de moneda), de modo que los patrones basados en letras permanezcan correctos en escritura latina, cirílica y han.

Principio técnico

El probador está impulsado por el motor RegExp de ECMAScript definido en la especificación del lenguaje. Las regex de ECMAScript son una implementación NFA con backtracking: el motor prueba cada alternativa de izquierda a derecha y retrocede cuando un cuantificador falla, lo que hace posibles los lookarounds y las referencias hacia atrás pero también produce backtracking catastrófico en entradas adversas. Las seis banderas que reconoce son g (global), i (insensible a mayúsculas), m (multilínea, anclas por línea), s (dotAll, '.' coincide con salto de línea), u (modo Unicode) y y (sticky, anclada a lastIndex). La semántica de coincidencia cambia drásticamente entre banderas. Con /u, el motor trata el patrón como una secuencia de puntos de código Unicode en lugar de unidades de código UTF-16, por lo que los pares sustitutos coinciden como un solo carácter y las clases de propiedad Unicode como \p{L} (cualquier letra), \p{Sc} (símbolo de moneda) y \p{Script=Han} quedan disponibles. Los grupos de captura con nombre (?<nombre>...) y el lookbehind (?<=...) son parte de ES2018 y están disponibles en Chromium 64+, Firefox 78+ y Safari 16.4+, pero las características exclusivas de PCRE como los grupos atómicos (?>...) y los cuantificadores posesivos (a++) aún no están en la especificación. El mayor riesgo en producción es el ReDoS — un patrón como (a+)+b en la entrada 'aaaaaaaaaaaaaaaa!' explora un número exponencial de caminos porque dos cuantificadores anidados pueden dividir la misma secuencia de caracteres de muchas formas. Las mitigaciones son bien conocidas: evitar cuantificadores anidados sobre la misma clase de caracteres, anclar con ^ y $ donde sea posible, preferir grupos atómicos cuando el motor los soporte, o cambiar a un motor de tiempo lineal como RE2 de Go (que sacrifica referencias hacia atrás y lookbehind por una coincidencia garantizada O(n)). Para entradas no confiables destinadas a validación del lado del servidor, RE2 o un parser escrito a mano es casi siempre la opción más segura.

  • Motor: ECMAScript RegExp es un NFA con backtracking, no un DFA; eso es lo que permite lookarounds y referencias hacia atrás pero también permite el backtracking catastrófico.
  • Banderas: g (global), i (insensible a mayúsculas), m (^/$ por línea), s (dotAll, '.' coincide con \n), u (modo Unicode, consciente de sustitutos), y (sticky, anclada a lastIndex).
  • Modo Unicode: /u desbloquea coincidencia por punto de código más \p{L} (letra), \p{Sc} (moneda), \p{Script=Han}; sin /u, [a-zA-Z]+ pierde toda palabra no latina.
  • Disponibilidad de sintaxis moderna: capturas con nombre (?<n>...) y lookbehind (?<=...) en Chromium 64+, Firefox 78+, Safari 16.4+; grupos atómicos (?>...) y cuantificadores posesivos (a++) no están en ECMAScript.
  • ReDoS: cuantificadores anidados sobre la misma clase como (a+)+b explotan exponencialmente; reforzar con anclas, grupos atómicos, o migrar a RE2 / re2-wasm para entradas no confiables.
  • Piso de complejidad: patrones literales anclados sobre un alfabeto fijo se ejecutan en O(n); las referencias hacia atrás y lookarounds sin límite llevan el peor caso a exponencial, por lo que se debe medir en entradas adversas antes de lanzar.

Ejemplos

Coincidir con una dirección de correo

Patrón:  ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$
Banderas: gi

Entrada:      contact: alice@example.com, bob_2024@mail.co.uk, invalid@.com
Coincidencias: alice@example.com, bob_2024@mail.co.uk  (2 hits)

Extraer direcciones IPv4 de un log

Patrón:  \b(?:\d{1,3}\.){3}\d{1,3}\b
Banderas: g

Entrada:      2026-06-15 ERROR client 192.168.1.42 connect failed (peer 10.0.0.1)
Coincidencias: 192.168.1.42, 10.0.0.1

Capturar partes de fecha con grupos nombrados

Patrón:  (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})
Banderas: g

Entrada: Sprint window: 2026-09-01 to 2026-09-15
Grupos:  {year:'2026', month:'09', day:'01'}, {year:'2026', month:'09', day:'15'}

Cuantificador greedy vs lazy

Entrada: <b>hello</b> <i>world</i>

.*  (greedy) -> coincide con toda la línea: <b>hello</b> <i>world</i>
.*? (lazy)   -> solo la primera coincidencia: <b>hello</b>

Lazy es lo que normalmente quieres al extraer contenido entre etiquetas.

Clase de letras consciente de Unicode

Patrón:  \p{L}+
Banderas: gu

Entrada:      Hello, 北京! Café Москва
Coincidencias: Hello, 北京, Café, Россия

Sin la bandera u y \p{L}, [a-zA-Z]+ se perdería todas las palabras no latinas.

Preguntas frecuentes

¿Qué dialecto de regex usa el comprobador?

El motor de regex de JavaScript (ECMAScript). Es similar a PCRE en las funciones comunes, pero difiere en casos límite: no hay cuantificadores posesivos, no hay recursión, los lookbehind requieren un navegador reciente, los grupos con nombre usan (?<name>...). En Python (re/regex), Java, .NET o PCRE el mismo patrón puede comportarse distinto: prueba también en el entorno real.

¿Qué flags se admiten?

g (global, encuentra todas las coincidencias), i (sin distinguir mayúsculas), m (multilínea, ^ y $ casan en límites de línea), s (dotall, . casa con saltos de línea), u (Unicode), y (sticky), d (hasIndices). Selecciónalos en la fila de toggles; la página muestra qué cambia cada uno en tu texto de prueba.

¿Por qué mi patrón devuelve menos resultados de los que esperaba?

Sin la flag g, regex.exec devuelve una sola coincidencia. Sin m, ^ y $ solo casan al principio o al final absoluto del texto. Sin u, los caracteres con pares subrogados (emoji) casan como dos mitades. La mayoría de los problemas de 'esto no funciona' son flags faltantes.

¿Cómo casar emojis y caracteres CJK?

Usa la flag u para activar el manejo correcto de Unicode. Usa clases de caracteres \p{...} (\p{Letter}, \p{Script=Han}, \p{Emoji}) para casar por propiedad Unicode. Sin u, [a-zA-Z] no casa con caracteres acentuados: amplía a [a-zA-ZÀ-ÿ] o usa \p{L}.

¿Puedo generar código a partir de un patrón?

La mayoría de versiones exporta el patrón como sintaxis de JavaScript, Python, PHP, Ruby, Go o Java con el escapado adecuado. Ten en cuenta que el mismo patrón puede comportarse distinto entre motores (codicia por defecto, comportamiento de las clases de caracteres, soporte de lookaround). Prueba siempre en el lenguaje destino.

¿Cuál es la diferencia entre cuantificadores codiciosos y perezosos?

Los codiciosos (* + ?) casan tanto como pueden y luego retroceden si hace falta. Los perezosos (*? +? ??) casan lo mínimo posible. Para 'extraer todo lo que hay entre A y B', el .* codicioso se pasará si hay varias B; el .*? perezoso para en la primera B. Para extraer contenido interno, suele ser mejor por defecto el perezoso.

¿Se sube mi regex o el texto de prueba?

No. La búsqueda de coincidencias se ejecuta en tu navegador con el motor regex nativo de JavaScript. Patrones e inputs no se transmiten.