Probador de regex
Prueba una expresión regular en vivo: coincidencias y grupos de captura, vista previa de reemplazos y división de texto — con semántica de JavaScript.
Introduce un patrón y un texto para ver resultados
Qué hace esta herramienta
Una expresión regular es un lenguaje compacto para describir patrones de texto, y la única forma fiable de escribir una es verla ejecutarse sobre texto real. Este probador hace exactamente eso, en vivo, en tres modos. Coincidir muestra cada lugar donde el patrón coincide, resaltado en tu texto, con cada grupo de captura listado debajo. Reemplazar previsualiza lo que produciría String.replace, incluidas las referencias $1 y lt;name>. Dividir muestra cómo String.split cortaría el texto — incluidas las partes que casi nadie predice bien, como los delimitadores capturados apareciendo en el resultado.
El patrón se ejecuta en el propio motor de JavaScript de tu navegador, no en una imitación. Lo que coincide aquí es exactamente lo que coincidirá en tu código JavaScript, byte a byte, porque es el mismo motor haciendo el trabajo.
Cómo leer los resultados de coincidencia
Cada coincidencia se resalta en el texto de prueba y se lista debajo con su posición: los desplazamientos de carácter donde empieza y termina. Si el patrón contiene grupos de captura, cada grupo aparece bajo su coincidencia con el valor que capturó. Los grupos se numeran por su paréntesis de apertura, de izquierda a derecha, exactamente como los numera el motor para $1, $2 y las retrorreferencias; un grupo con nombre muestra su nombre junto a su número. Un grupo que no participó en la coincidencia — por ejemplo, el lado perdedor de una alternancia — se marca como tal en lugar de mostrarse como cadena vacía, porque para tu código son cosas distintas: undefined frente a "".
Un patrón puede coincidir legítimamente con cero caracteres — ^, \b o una alternativa vacía pueden hacerlo. Esas coincidencias de longitud cero no resaltan nada, así que la herramienta marca la posición con una línea fina en lugar de dejarte preguntándote adónde fue la coincidencia.
Las banderas
Las banderas cambian el comportamiento de todo el patrón, y dos de ellas causan la mayor parte de la confusión con las regex:
- g (global): encuentra todas las coincidencias, no solo la primera. Sin ella, coincidir muestra un resultado y reemplazar cambia una sola aparición. Es la bandera que más se olvida.
- i (ignorar mayúsculas): las letras coinciden sin importar su caja.
- m (multilínea): ^ y $ coinciden al principio y al final de cada línea, no solo del texto completo.
- s (dotAll): el punto también coincide con los saltos de línea. Sin ella, . se detiene en cada salto.
- u (Unicode): el patrón trabaja en puntos de código, así que los emoji y otros caracteres fuera del rango básico se comportan correctamente, y los escapes de propiedades \p{…} pasan a estar disponibles.
- y (anclado): la coincidencia debe empezar exactamente donde terminó la anterior. Útil para tokenizadores; sorprendente en cualquier otro contexto.
- d (índices): el motor registra las posiciones exactas de cada grupo. No cambia nada de lo que coincide.
Referencias de reemplazo
El texto de reemplazo no se toma literalmente: un puñado de secuencias con $ se expanden para cada coincidencia. $1 a $9 insertan lo que capturaron los grupos numerados, lt;name> inserta un grupo con nombre, amp; inserta la coincidencia completa y $ produce un signo de dólar literal. Todo lo demás se copia tal cual.
"2026-07-20".replace(/(?<y>\d{4})-(\d{2})-(\d{2})/, "$3.$2.lt;y>")
// → "20.07.2026"Un comportamiento de JavaScript que conviene interiorizar: sin la bandera g, replace cambia solo la primera aparición. No es una rareza de esta herramienta — es lo que hará tu código. La herramienta muestra un aviso cuando g está desactivada, para que el reemplazo único no parezca un error.
Cómo se comporta split en realidad
String.split con una regex tiene dos comportamientos que sorprenden con regularidad incluso a desarrolladores con experiencia, y el modo dividir existe en gran medida para hacerlos visibles. Primero, si el patrón contiene grupos de captura, lo que capturan se entreteje en el arreglo resultante entre las piezas — dividir "a,b" con (,) produce tres partes: a, la coma, b. Segundo, las coincidencias justo al principio o al final del texto, o dos coincidencias adyacentes, producen cadenas vacías en el resultado, que la herramienta muestra explícitamente en lugar de ocultar.
"a,b".split(/(,)/) // → ["a", ",", "b"] ",a,".split(/,/) // → ["", "a", ""]
Los patrones desbocados se detienen, no se soportan
Algunos patrones son trampas. Un cuantificador anidado como (a+)+ probado contra una cadena larga que casi coincide obliga al motor a reintentar una cantidad exponencial de combinaciones antes de rendirse — esto se llama retroceso catastrófico, y puede congelar una pestaña del navegador durante minutos. Esta herramienta ejecuta tu patrón en un hilo worker separado y lo detiene a los dos segundos, de modo que un patrón desbocado te cuesta un mensaje en lugar de una página congelada. Si te aparece ese mensaje, busca cuantificadores anidados o alternativas que se solapan; la solución suele ser lograr que la repetición interna y la externa no puedan coincidir con el mismo texto.
Como con todas las herramientas de este sitio, el patrón y el texto nunca salen de tu dispositivo — el worker es parte de la página, no un servidor.
Preguntas frecuentes
- ¿Qué variante de regex usa este probador?
- JavaScript (ECMAScript), porque el patrón se ejecuta en el motor del propio navegador. Los grupos con nombre, el lookbehind y los escapes de propiedades Unicode \p{…} funcionan como en JavaScript moderno. Los patrones de PCRE o Python en su mayoría se trasladan bien, pero las construcciones que JavaScript no tiene — cuantificadores posesivos, grupos atómicos, \A y \z — serán rechazadas o significarán otra cosa.
- ¿Por qué mi patrón solo encuentra una coincidencia?
- Casi siempre: la bandera g está desactivada. Sin ella, JavaScript se detiene en la primera coincidencia, y replace cambia solo la primera aparición. Activa la casilla g para buscar en todo el texto.
- ¿Qué significa «no participó» para un grupo?
- El grupo existe en el patrón pero no se usó en esta coincidencia concreta — normalmente porque está en la rama perdedora de una alternancia, o bajo un cuantificador que coincidió cero veces. En código su valor es undefined, que es distinto de capturar una cadena vacía, así que la herramienta mantiene la diferencia.
- ¿Se envía mi patrón o mi texto a un servidor?
- No. La coincidencia se ejecuta por completo en tu navegador, dentro de un hilo worker en la misma página. El límite de seguridad de dos segundos también se aplica localmente — nada de lo que escribes sale de tu dispositivo.