Probador de Expresiones Regulares

Prueba expresiones regulares con resaltado en vivo y grupos de captura.

Tu patrón y tus datos no salen de la página

Probar una expresión regular online

Coincidencias resaltadas
Detalle de coincidencias

    Sobre este probador de expresiones regulares

    Escribe un patrón y ve los resultados mientras tecleas: las coincidencias se resaltan directamente sobre el texto de prueba, y la lista de detalle muestra la posición, el texto completo y cada grupo de captura numerado o con nombre. La vista previa de reemplazo expande referencias como $1 y $<nombre> en vivo, y los flags g, i, m, s, u e y se activan con casillas. Un patrón inválido muestra el error exacto del motor en vez de fallar en silencio, y en textos enormes solo se muestran las primeras 2,000 coincidencias: el contador indica 2,000+ para que sepas que el resaltado es parcial.

    El probador usa el motor de expresiones regulares de JavaScript de tu propio navegador, así que lo que coincide aquí es exactamente lo que coincidirá en Node.js o en tu código front-end, sin aproximaciones. Todo ocurre localmente: ni el patrón ni el texto de prueba salen de tu equipo, así que puedes depurar con logs de producción o datos reales sin riesgo.

    Errores comunes con regex de JavaScript y cómo arreglarlos

    Este probador usa el motor real de JavaScript de tu navegador, así que estos fallos se comportan aquí igual que en tu código. Casi siempre, un "mi regex no funciona" es uno de estos:

    SíntomaCausaSolución
    Solo encuentra o resalta la primera coincidenciaFalta el flag g: match() y replace() se detienen en la primeraAgrega el flag g; usa matchAll() para recorrer todas (lanza un TypeError si le falta g)
    El punto no coincide a través de un salto de líneaPor defecto . no toca \n, \r ni los separadores U+2028 / U+2029Agrega el flag s (dotAll)
    ^ y $ solo coinciden al inicio y al final de todo el textoSin m se anclan a la cadena completa, no a cada líneaAgrega el flag m (multiline)
    replace() cambia solo una apariciónUn patrón de texto, o un regex sin g, reemplaza una sola vezPasa un regex /.../g o usa replaceAll()
    Un /g/ reutilizado se salta coincidencias, o test() alterna true, false, true...test() y exec() avanzan lastIndex en un regex global y siguen la búsqueda desde ahíReinicia re.lastIndex = 0 entre entradas, usa un regex nuevo sin g, o pásate a matchAll()
    Capturas el fragmento de texto equivocadomatch[0] es la coincidencia completa; lo que buscas está en match[1], match[2]... o match.groups.nombreLee el grupo numerado o con nombre, no el índice 0

    Un patrón que congela la pestaña: backtracking catastrófico

    Cuando un cuantificador queda anidado dentro de otro sobre los mismos caracteres, un texto que casi coincide obliga al motor a probar una cantidad exponencial de formas de dividirlo antes de rendirse. Como esto corre en tu propio motor de JS, la pestaña simplemente se cuelga. El caso clásico:

    /(a+)+$/.test("aaaaaaaaaaaaaaaaaaaa!")
    // se cuelga: el ! final impide la coincidencia y el motor
    // prueba antes cada forma de partir la cadena de a's
    
    // arreglo: el grupo interno no aporta nada. Un solo
    // cuantificador, anclado, coincide con lo mismo y falla ya
    /^a+$/.test("aaaaaaaaaaaaaaaaaaaa!")  // false, al instante
    Anidar cuantificadores sobre el mismo carácter es la trampa; quitar la redundancia es la solución.

    Tablas de referencia

    Preguntas frecuentes

    ¿Qué sabor de regex usa este probador?

    JavaScript (ECMAScript), el mismo motor de tu navegador y de Node.js. Gran parte de la sintaxis coincide con PCRE o Python, pero JavaScript no tiene grupos atómicos ni cuantificadores posesivos, y el lookbehind no funciona en versiones viejas de Safari. Si tu patrón va dirigido a otro lenguaje, verifica esas diferencias antes de usarlo.

    ¿Qué significan los flags g, i, m, s, u e y?

    g encuentra todas las coincidencias en vez de solo la primera; i ignora mayúsculas y minúsculas; m hace que ^ y $ funcionen en cada línea; s permite que el punto coincida con saltos de línea; u activa el modo Unicode completo, donde un emoji cuenta como un solo carácter; y (sticky) solo coincide empezando exactamente en la posición actual.

    ¿Por qué mi patrón congela la página?

    Es backtracking catastrófico: cuantificadores anidados como (a+)+ obligan al motor a probar una cantidad exponencial de combinaciones cuando el texto casi coincide. Como el probador usa el motor real de tu navegador, un patrón costoso afecta tu propia pestaña. Haz el patrón interno más específico o ánclalo para evitarlo.

    Herramientas relacionadas