¿Qué significa « probar una expresión regular »?
Probar una expresión regular (« regex test online », « tester regex javascript ») consiste en ejecutar un patrón contra un texto real y observar exactamente lo que devuelve el motor: las cadenas que coinciden, su posición y el valor de los grupos de captura. Un patrón que « parece correcto » no dice nada hasta que se ejecuta sobre tus datos — esa es la única diferencia que cuenta entre la regex del tutorial y la regex de producción.
La prueba responde a tres preguntas distintas. Si hace match : la tabla de coincidencias lo dice a la primera. Dónde y cuántas : el índice y la longitud muestran si el ancla estaba en el lugar correcto. Qué captura : los grupos numerados o con nombre revelan si la parte que pensabas extraer es realmente esa.
Los metacaracteres que marcan la diferencia
El punto . sustituye cualquier carácter salvo el salto de línea — de ahí la bandera s cuando tu texto es multilínea. Los cuantificadores *, + y ? son codiciosos : se detienen en el primer número de repeticiones suficiente. El sufijo ? (*?, +?, {2,5}?) invierte este comportamiento y da la versión perezosa, la que casi siempre conviene preferir cuando un .* devora el final de la línea.
Los corchetes definen una clase: [abc] acepta un carácter entre los listados, [^abc] todo salvo ellos, [a-z0-9] un intervalo. Atención a la negación al inicio de la clase — [^...] solo para la primera posición, de lo contrario ^ vuelve a ser literal. La barra vertical | separa alternativas y se comporta como una prioridad baja: ^cat|dog$ significa « todo el texto vale cat » o « todo el texto vale dog », no « cat o dog al principio o al final » — en ese caso hay que agrupar: ^(?:cat|dog)$.
Grupos, lookahead y lookbehind
Los paréntesis capturan. El grupo 1 es accesible con $1 en el lado del reemplazo y \1 en el lado del patrón, los grupos con nombre con $<nom> y \k<nom> — mucho más legible a partir de tres grupos. (?:...) agrupa sin crear un número, lo que conviene preferir cuando solo capturas por la estructura.
Las aserciones (lookaround) verifican sin consumir: (?=...) exige que lo que sigue coincida, (?!...) lo prohíbe, (?<=...) y (?<!...) hacen lo mismo con lo que precede. Así se exige un carácter especial en una contraseña sin incluirlo en la captura: ^(?=.*\d)(?=.*[A-Z]).{12,}$.
ReDoS: cuando la regex se convierte en una bomba de relojería
El ReDoS (Regular Expression Denial of Service) proviene del backtracking : ante una entrada casi conforme, un patrón como (a+)+$ explora todas las formas de cortar los « a » antes de fallar, y el número de explosiones crece exponencialmente. Dos reflejos: probar el patrón con un volumen realista — la pestaña Rendimiento lo hace por ti — y nunca ejecutar una regex no auditada sobre una entrada externa sin límite de tamaño. En un servidor, una regex bloqueada congela un worker entero hasta que vence el timeout.
JavaScript, PCRE, Python: las mismas bases, algunas diferencias
El probador usa el motor nativo del navegador, es decir, ECMAScript. Las sintaxes básicas — clases, cuantificadores, grupos, lookahead, banderas g i m s u y — son comunes a PCRE (PHP, Perl), a Python con re, a Java y a Go. Las diferencias están sobre todo en el lookbehind (ausente durante mucho tiempo en JavaScript, hoy compatible), en las propiedades Unicode y en las banderas en línea como (?i), propias de PCRE. Traducir un patrón de un lenguaje a otro sigue siendo un ejercicio de detalle — no de invención.
Recomendado para
Desarrolladores front-end y back-end (validación de formularios, parsing de registros, migración de datos), ops y DevOps (filtros de configuración, reglas WAF), testers y analistas (extracción de columnas, control de formato), redactores y analistas de datos (limpieza de ficheros), estudiantes (entender los metacaracteres) y cualquier persona que necesite un probador de expresiones regulares rápido, completo y confidencial — como complementos, el formateador JSON, el codificador y decodificador URL, el codificador y decodificador Base64 y el codificador y decodificador JWT.