Probador de Expresiones Regulares
Escribe un patrón y un texto de prueba — las coincidencias se resaltan mientras escribes. El patrón y las banderas se sincronizan con el URL para compartir; tu texto de prueba nunca.
Resultado resaltado
Coincidencias (0)
Prueba expresiones regulares de JavaScript sobre texto real
Esta herramienta compila un RegExp nativo a partir
de tu patrón y tus banderas, dentro de un try/catch para que un patrón roto
muestre un error en lenguaje sencillo en vez de una pantalla en
blanco. Luego lo ejecuta sobre tu texto de prueba exactamente
como lo haría tu propio código — matchAll() cuando
la bandera global está marcada, recogiendo todas las
coincidencias, o un único match() cuando no lo
está. Cada coincidencia se resalta en su lugar recortando la
cadena original alrededor de match.index y match[0].length y envolviendo ese fragmento en un
elemento <mark> — nunca buscando y
reemplazando sobre la cadena, algo que se rompe en cuanto tu
texto de prueba contiene los mismos caracteres que buscas. Cada
coincidencia también se lista abajo con su posición y el texto
capturado por cualquier grupo entre paréntesis.
Ejemplo práctico
Patrón: (\w+)@(\w+)\.com, banderas gu, contra "Escribe a maria@example.com o a juan@test.com para ayuda."
-
Coincidencia 1 en el índice 11:
maria@example.com— Grupo 1:maria· Grupo 2:example -
Coincidencia 2 en el índice 32:
juan@test.com— Grupo 1:juan· Grupo 2:test
Dos coincidencias, porque la bandera global está activa —
desmárcala y la herramienta se detiene tras la primera,
"maria@example.com", igual que haría String.prototype.match() sin la bandera g.
Preguntas frecuentes
¿Por qué mi patrón no coincide en varias líneas?
Dos banderas distintas de JavaScript afectan al texto con varias líneas, y es fácil usar la que no toca. m (multiline) cambia lo que significan ^ y $ — con ella activada, coinciden con el inicio/fin de cada línea en vez de solo el inicio/fin de toda la cadena. s (dotAll) cambia lo que coincide el punto — con ella activada, el . también coincide con saltos de línea, no solo con "cualquier carácter que no sea un salto de línea". Un patrón que necesita abarcar líneas con .* normalmente necesita s; un patrón que ancla cada línea con ^ o $ normalmente necesita m. Son independientes, y algunos patrones necesitan ambas.
¿Qué hace exactamente cada bandera?
g (global) devuelve todas las coincidencias en la cadena en vez de detenerse en la primera. i (ignoreCase) hace que las letras coincidan sin importar mayúsculas o minúsculas. m (multiline) hace que ^ y $ coincidan con los límites de línea, no solo con el inicio y el fin de la cadena. s (dotAll) hace que el . también coincida con saltos de línea. u (unicode) trata el patrón como puntos de código Unicode en vez de unidades de código de 16 bits, lo que corrige la coincidencia de caracteres fuera del Plano Multilingüe Básico — la mayoría de los emoji, por ejemplo — y habilita escapes de propiedad Unicode como \p{Letter}.
¿Es exactamente la misma sintaxis que usaría en Python, PHP o grep?
No — esta herramienta construye un RegExp real de JavaScript, así que se comporta exactamente como lo haría JS, y el regex de JS es su propio dialecto. PCRE (que usa PHP, y en el que se basan muchas otras herramientas) admite construcciones que a JS le faltan en algunas versiones de motor, como grupos atómicos y cuantificadores posesivos; JavaScript, a su vez, tiene funciones propias, como grupos de captura con nombre (?<nombre>...) y aserciones lookbehind, que compilaciones antiguas de PCRE no admiten. Si el patrón va destinado a otro lenguaje o herramienta, pruébalo también allí en vez de asumir que una coincidencia aquí es universal.
¿Cómo leo los grupos de captura en los resultados?
Cada par de paréntesis en tu patrón captura el texto que coincidió dentro de él, numerado de izquierda a derecha empezando en 1 (el grupo 0, que aquí no se muestra por separado, es siempre la coincidencia completa). Para (\w+)@(\w+)\.com contra "maria@example.com", el grupo 1 captura "maria" y el grupo 2 captura "example" — útil para extraer un usuario o un dominio de una coincidencia más grande sin una segunda pasada. Un grupo que forma parte del patrón pero no participó en una coincidencia concreta — dentro de una alternancia que tomó la otra rama, por ejemplo — se muestra como sin coincidencia en vez de como una cadena vacía, y esta herramienta marca esa diferencia explícitamente.