Viendo en Español Ver en inglés

Probador de regex

Prueba expresiones regulares de JavaScript en directo. Mira las coincidencias resaltadas y los grupos de captura listados.

/ /

Coincidencias resaltadas

 

Coincidencias y grupos

  1. Escribe tu patrón regex en el campo superior (no hace falta envolverlo en barras).
  2. Activa las banderas que quieras: g para todas las coincidencias, i para no distinguir mayúsculas, etc.
  3. Pega o escribe la cadena de prueba en el cuadro Cadena de prueba.
  4. Verás las coincidencias resaltadas en tiempo real; revisa los grupos capturados en la tabla inferior.
¿Qué hace?

Este probador ejecuta tu patrón contra la cadena de prueba con el motor RegExp nativo del navegador — el mismo que usan Node.js, Deno y cualquier navegador. Las coincidencias se resaltan en línea. Los grupos de captura numerados y con nombre se extraen a una tabla para que puedas ver qué capturó cada segmento entre paréntesis.

Ejemplo

Patrón (con bandera g):

\b(\w+)@(\w+\.\w+)\b

Cadena de prueba:

Contact us at [email protected] or [email protected]. Not an email: foo@bar (no TLD).

Coincidencias:

1  [email protected]        $1: hello    $2: example.com
2  [email protected]   $1: support  $2: happycoder.dev

foo@bar no coincide porque \w+\.\w+ requiere un punto en el dominio.

¿Por qué mi regex no coincide?

  • Olvidaste la bandera g. Sin ella, solo se devuelve la primera coincidencia. /cat/.exec("cat cat") encuentra una "cat"; /cat/g encuentra las dos.
  • Metacaracteres sin escapar. example.com también coincide con examplexcom porque . coincide con cualquier carácter. Escápalo: example\.com.
  • La coincidencia voraz captura de más. <.*> sobre <a><b> se lo lleva entero. Usa la forma perezosa <.*?> o la clase negada <[^>]*> para detenerse en el primer >.
  • Confusión con límites de palabra. \b es una posición entre un carácter de palabra y otro que no lo es. Patrones como \bfoo-bar\b fallan porque el - central ya es un límite no-palabra.
  • Diferencia de mayúsculas. [a-z]+ no coincidirá con Hello. Añade la bandera i o usa [A-Za-z]+.
  • ^ / $ multilínea. Sin la bandera m solo se anclan al inicio/fin de toda la cadena, no de cada línea. Actívala si estás escaneando líneas de registro.
Preguntas frecuentes

¿Qué sabor de regex usa este probador?

Regex de JavaScript (ECMAScript), mediante el motor RegExp del navegador. Esto difiere de PCRE (PHP, Perl), del módulo re de Python y de POSIX en varias cosas: sin recursión, sin cuantificadores posesivos, los grupos con nombre usan (?<nombre>...) en lugar de (?P<nombre>...), y abreviaturas de clases como \d son solo ASCII salvo que añadas la bandera u.

¿Soporta lookbehind?

Sí. Las aserciones de lookbehind como (?<=foo)bar y (?<!foo)bar se añadieron en ES2018 y funcionan en todos los Chromium, Firefox y Safari actuales. Si tu objetivo incluye navegadores muy antiguos, revisa caniuse antes de depender de ellas — pero este probador las ejecuta sin problemas.

¿Qué significan las banderas g, i, m, s y u?

g encuentra todas las coincidencias en lugar de solo la primera. i hace que la coincidencia ignore mayúsculas. m hace que ^ y $ coincidan con el inicio y fin de cada línea en vez de toda la cadena. s (dotall) hace que . también coincida con saltos de línea. u habilita el manejo Unicode completo y un análisis de escapes más estricto. Elige solo las necesarias — g en especial cambia cuántas coincidencias obtienes.

¿Por qué mi cuantificador voraz coincide con demasiado?

Cuantificadores como *, + y {n,} son voraces por defecto — coinciden lo más posible y solo ceden si falla el resto del patrón. Añade un ? para hacerlos perezosos: .*? coincide lo menos posible. Arreglo típico para <a>.*</a> comiéndose varias etiquetas: usa <a>.*?</a> o la clase negada <a>[^<]*</a>.

¿Cómo referencio un grupo capturado más adelante en el patrón o en el reemplazo?

Dentro del patrón, usa \1, \2, etc. para volver a coincidir con el mismo texto que capturó un grupo anterior — (\w+)\s+\1 coincide con palabras repetidas. En la cadena de reemplazo (no soportada en este probador en vivo, pero sí en String.replace) se usan $1, $2. Los grupos con nombre usan \k<nombre> dentro del patrón y $<nombre> en reemplazos.

¿Por qué se rompe mi regex cuando el patrón tiene un punto, barra o paréntesis?

Son metacaracteres de regex. Para coincidirlos literalmente, escápalos con barra invertida: \. para un punto, \/ para una barra (opcional en una cadena de new RegExp, requerido entre literales /.../), \( y \) para paréntesis. Los caracteres especiales son . * + ? ^ $ { } ( ) | [ ] \ — cualquiera como texto literal necesita escape.

¿Guardan la regex o el texto de prueba que escribo aquí?

No. No guardamos los patrones ni el texto contra el que los pruebas. Todo se descarta al cerrar o actualizar la pestaña — sin registros, sin rastro de nuestro lado de lo que coincidiste. Para más tranquilidad, confírmalo en las herramientas de desarrollo de tu navegador.