Desarrollo

Prueba una expresión regular contra tu texto

Escribe un patrón y tu texto. Las coincidencias se resaltan mientras escribes, y cada una queda listada abajo con sus grupos de captura y su posición. Las banderas son casillas, y el campo de reemplazo muestra qué produciría la sustitución antes de que la ejecutes en algún lado donde importe.

0coincidencias
0grupos de captura
$1 y $2 son los grupos de captura. $& es la coincidencia entera.

Qué cambia cada bandera

Cinco casillas cubren lo que más se usa, y cada una cambia el resultado, no el patrón.

Por qué tu patrón coincide con más de lo que querías

Los cuantificadores son voraces por defecto. <.*> contra <b>hola</b> se lleva toda la cadena, porque .* agarra todo lo que puede y recién devuelve caracteres hasta que el patrón logra terminar. Agregarle un signo de pregunta lo vuelve perezoso: <.*?> para en el primer corchete de cierre y devuelve dos coincidencias en vez de una.

La otra sorpresa habitual es el punto, que no coincide con un salto de línea salvo que marques s. Un patrón probado en una sola línea y después corrido sobre un archivo devuelve menos coincidencias sin avisar, y la solución suele ser esa bandera y no tocar el patrón.

Qué entiende el campo de reemplazo

El reemplazo es el de JavaScript, así que $1 a $9 son los grupos de captura, $& es la coincidencia entera, y $<nombre> funciona cuando el grupo está nombrado con (?<nombre>...). Un signo de peso literal es $$.

Sin la bandera g solo se reemplaza la primera coincidencia. Esa asimetría agarra desprevenido a mucha gente, porque el resaltado de arriba sigue mostrando una coincidencia y el resultado de abajo sigue pareciendo correcto en un ejemplo corto.

Dónde la regex es la herramienta equivocada

HTML y XML son el ejemplo de manual. Las etiquetas se anidan a cualquier profundidad, los atributos pueden contener los caracteres con los que estás buscando, y los comentarios pueden tener cualquier cosa adentro, así que un patrón que anda con el archivo que tienes delante falla con el siguiente. Usa un parser. El navegador trae DOMParser.

Las direcciones de correo son el segundo. El patrón del campo de arriba es una demostración, no un validador: la gramática real del RFC 5322 admite cadenas entre comillas, comentarios y direcciones que ningún patrón simple acepta. Comprobar que haya una @ con algo de cada lado y después mandar un mensaje de confirmación encuentra más errores reales que cualquier patrón.

Patrones que cuelgan la pestaña

JavaScript usa un motor con retroceso, y algunos patrones lo hacen explorar una cantidad explosiva de posibilidades. (a+)+$ contra treinta aes seguidas de una be tarda más de lo que nadie va a esperar. Nada puede interrumpirlo una vez que arranca, y por eso esta página prueba como mucho 50.000 caracteres: con esa cantidad, hasta un patrón malo termina.

La forma a vigilar es un cuantificador adentro de otro cuantificador donde los dos pueden coincidir con los mismos caracteres. Si un patrón se siente lento con una cadena corta, suele ser eso, y partirlo en dos pasadas más simples lo arregla.

Qué se queda en tu máquina

El patrón, el texto y el reemplazo los maneja el motor de expresiones regulares del propio navegador. No se sube nada, y acá importa más que en otras herramientas: la gente prueba patrones contra extractos de logs, registros de clientes y datos de producción, y eso no debería pegarse en una página que lo manda a algún lado.

Preguntas frecuentes

¿Por qué mi patrón reemplaza solo la primera coincidencia?

Porque la bandera g está apagada. Sin ella el motor para en la primera coincidencia, y el reemplazo para con él. Marca la casilla g y se reemplazan todas las apariciones. Es la sorpresa más común con el reemplazo en JavaScript, y cuesta verla porque el resaltado de arriba sigue mostrando bien esa única coincidencia.

¿Por qué mi patrón se frena al final de una línea?

El punto no coincide con un salto de línea salvo que esté activa la bandera s. Un patrón que anda en una línea y no devuelve nada en un párrafo casi siempre está chocando con esto. Marca s para que el punto cruce los saltos de línea. Ojo que la bandera m es otra cosa: cambia qué significan ^ y $, y no toca el punto.

¿Puedo usar grupos de captura con nombre?

Sí. Se escriben como (?<nombre>...) y aparecen en la lista de coincidencias bajo su nombre además de su número. En el campo de reemplazo se escriben $<nombre>. Los grupos con nombre vuelven legible un patrón largo meses después, cuando la diferencia entre $3 y $4 ya dejó de ser obvia.

¿Es la misma regex que usa mi lenguaje?

Es el motor de JavaScript, así que coincide con lo que corre en un navegador o en Node. La mayoría de lo que escribas es portable, pero el lookbehind, los grupos con nombre y los escapes de propiedad \\p{...} difieren entre lenguajes, y Python, PCRE y Go tienen cada uno sus propias extensiones. Prueba en el lenguaje en el que vas a publicar antes de confiar en una construcción rara.

¿Mi texto se sube a algún lado?

No. El patrón y el texto pasan por el motor de expresiones regulares del propio navegador, en tu máquina, y no se envía nada. Acá importa porque la gente prueba patrones contra extractos de logs y registros de clientes, que no deberían pegarse en una página que los transmite.

Última actualización 4 de octubre de 2026