Regex JavaScript a un lado, `re` de Python al otro. Sin traducción mental.
Escribiste una regex en JavaScript: `/(\w+)@(\w+\.com)/gi`. Ahora necesitas el mismo patrón en un script de Python. Te quedas diez minutos preguntándote si `i` se vuelve `re.I` o `re.IGNORECASE`, si los grupos con nombre siguen funcionando igual o si Python entiende lookbehind como JS. Fricción inútil cada vez.
Pega la regex JS a la izquierda y obtienes `re.compile(r"...", re.IGNORECASE)` a la derecha. Con el mapeo correcto de flags, la sintaxis correcta de grupos con nombre (`(?<name>...)` → `(?P<name>...)`) y una lista de advertencias cuando algo no se traduce de forma limpia: lookbehind de ancho variable, grupos atómicos, el flag sticky `y`, el flag global `g`.
Tres modos en una herramienta: JS → Python, Python → JS y flags inline `(?i)` ↔ `re.IGNORECASE` para cuando solo necesites leer el patrón de otra persona. Más un probador en vivo debajo de cada panel: pega una muestra, ve las coincidencias resaltadas y copia el resultado con un clic. Todo ocurre en tu navegador; tu patrón no sale de la página.
Cómo se usa
- Elige un modo en la barra segmentada de arriba: JS → Python si tienes una regex JavaScript y necesitas Python, Python → JS al revés, Flags inline ↔ re.flags cuando solo quieras traducir la notación de flags.
- Pega el patrón a la izquierda. Para JS acepta el literal completo (`/.../flags`) o solo el cuerpo: el parser lo detecta. Para Python pega el patrón crudo o una llamada completa `re.compile(r"...", re.I | re.M)`.
- Lee el panel derecho. Obtienes el código convertido en un bloque listo para copiar, con los flags originales traducidos al otro motor.
- Mira la sección de advertencias. Cada diferencia que importa (el flag `g`, sticky, ancho de lookbehind, sintaxis de grupos con nombre) aparece como una nota corta para que sepas a qué prestar atención.
- Cambia el formato de salida. Para Python puedes elegir entre `re.compile(...)` completo y patrón plano + lista de flags. Para JS, entre el literal `/.../flags` y `new RegExp("...", "...")`. Elige el destino que pegues.
- Usa el probador de abajo: pega un texto de muestra, el motor ejecuta la regex en vivo y resalta las coincidencias. El probador usa el motor JS en ambos lados; las características avanzadas se comportan como en V8.
- Pulsa una muestra bajo la entrada para precargar un caso típico (email, URL, fecha con grupos con nombre, lookbehind). Útil para hacer una comprobación antes de confiar en el conversor con tu patrón.
Cuándo te resulta útil
Cinco situaciones en las que el conversor te ahorra de cinco a quince minutos y una pestaña llena de Stack Overflow:
- Portar un validador frontend al backend. Tienes una regex JS para emails o teléfonos en un formulario y necesitas la misma comprobación en un endpoint de API en Python. Pega, obtén `re.compile(...)`, las advertencias te dicen si `g` importa o si tus grupos con nombre funcionan en la versión de Python destino.
- Leer un script en un lenguaje en el que no sueles escribir. Has heredado un `scraper.py` lleno de `re.findall(r"(?P<title>.+?)</h1>", html, re.S)` y quieres probar el patrón rápido en DevTools. Pégalo en Python → JS, copia el literal `/.../` y mételo en la consola del navegador.
- Traducir respuestas de Stack Overflow. La mitad de las respuestas de regex en internet usan sintaxis Python aunque la pregunta sea de JS, y al revés. El conversor es más rápido que reescribirlo a mano y atrapa trampas como `(?P<name>...)` que de otro modo perderías.
- Trabajar con el flag `x` / `re.VERBOSE`. Una compañera escribió una preciosa regex Python multilínea con comentarios usando `re.VERBOSE`. JS no tiene ese modo. El conversor te avisa y te muestra la versión plana que puedes pegar.
- Migrar entre versiones de Python. Escribiste `(?<name>...)` en Python 3.12 y un compañero sigue en 3.10. Pega en cualquier modo y el conversor lo reescribe a la forma más segura `(?P<name>...)` y añade una advertencia para que el cambio sea intencional.