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.
Qué cambia cada bandera
Cinco casillas cubren lo que más se usa, y cada una cambia el resultado, no el patrón.
gbusca todas las coincidencias. Sin ella el motor para en la primera, y el reemplazo también: singsolo se reemplaza la primera aparición.iignora mayúsculas y minúsculas.mhace que^y$signifiquen el principio y el final de cada línea en lugar del texto entero. No le hace nada al punto.spermite que el punto coincida con un salto de línea. Sin ella el punto se frena al final de la línea, que es por qué un patrón que anda en una línea no devuelve nada en un párrafo.uactiva el modo Unicode. Es lo que vuelve legales\p{L}y la forma\u{1F600}, y hace que el motor cuente por punto de código, así un emoji es una cosa y no dos.
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