Regex JavaScript d'un côté, `re` Python de l'autre. Pas de traduction mentale.
Vous avez écrit une regex en JavaScript : `/(\w+)@(\w+\.com)/gi`. Maintenant il vous faut le même pattern dans un script Python. Vous restez là pendant dix minutes à vous demander si `i` devient `re.I` ou `re.IGNORECASE`, si les groupes nommés fonctionnent toujours pareil, si Python comprend les lookbehind comme JS. Friction inutile à chaque fois.
Collez la regex JS à gauche, vous obtenez `re.compile(r"...", re.IGNORECASE)` à droite. Avec le bon mapping de flags, la bonne syntaxe de groupe nommé (`(?<name>...)` → `(?P<name>...)`), et une liste d'avertissements quand quelque chose ne se traduit pas proprement : lookbehind de largeur variable, groupes atomiques, le flag sticky `y`, le flag global `g`.
Trois modes dans un seul outil : JS → Python, Python → JS, et inline `(?i)` ↔ `re.IGNORECASE` pour les moments où vous avez juste besoin de lire le pattern de quelqu'un. Plus un testeur en direct sous chaque panneau : collez un échantillon, voyez les matches surlignés, en un clic vous copiez le résultat. Tout se passe dans votre navigateur, votre pattern ne quitte jamais la page.
Comment l'utiliser
- Choisissez un mode dans la barre segmentée en haut : JS → Python si vous avez une regex JavaScript et avez besoin de Python, Python → JS dans l'autre sens, Inline flags ↔ re.flags quand vous voulez juste traduire la notation de flags.
- Collez le pattern à gauche. Pour JS, acceptez le littéral complet (`/.../flags`) ou juste le corps, le parser comprend lequel c'est. Pour Python, collez soit le pattern brut soit un appel `re.compile(r"...", re.I | re.M)` complet.
- Lisez le panneau de droite. Vous obtenez le code converti dans un bloc prêt à copier, avec les flags originaux traduits vers l'autre moteur.
- Vérifiez la section des avertissements. Chaque différence qui compte (le flag `g`, sticky, largeur de lookbehind, syntaxe de groupe nommé) apparaît comme une courte note pour que vous sachiez à quoi faire attention.
- Changez le format de sortie. Pour Python, vous pouvez choisir entre `re.compile(...)` complet et un pattern simple + liste de flags. Pour JS, entre le littéral `/.../flags` et `new RegExp("...", "...")`. Choisissez la cible de collage que vous avez.
- Utilisez le testeur en bas : collez un texte exemple, le moteur lance la regex en direct et surligne les matches. Notez que le testeur utilise le moteur JS des deux côtés, les fonctionnalités avancées se comportent comme dans V8.
- Cliquez sur un échantillon sous l'entrée pour pré-remplir un cas typique (email, URL, date avec groupes nommés, lookbehind). Utile pour vérifier le convertisseur avant de lui faire confiance sur votre propre pattern.
Quand c'est utile
Cinq situations où le convertisseur fait gagner cinq à quinze minutes et un onglet plein de Stack Overflow :
- Porter un validateur frontend vers le backend. Vous avez une regex JS pour emails ou numéros de téléphone dans un formulaire, et il vous faut le même check dans un endpoint d'API Python. Collez, obtenez `re.compile(...)`, les avertissements vous disent si `g` compte ou si vos groupes nommés marchent sur la version Python cible.
- Lire un script dans un langage que vous n'écrivez pas d'habitude. Vous avez hérité d'un `scraper.py` plein de `re.findall(r"(?P<title>.+?)</h1>", html, re.S)` et vous voulez tester le pattern rapidement dans DevTools. Collez-le dans Python → JS, copiez le littéral `/.../`, déposez dans la console du navigateur.
- Traduire des réponses Stack Overflow. La moitié des réponses regex sur internet utilisent la syntaxe Python même quand la question concerne JS, et inversement. Le convertisseur est plus rapide que réécrire à la main et attrape les pièges comme `(?P<name>...)` que vous manqueriez sinon.
- Travailler avec le flag `x` / `re.VERBOSE`. Un collègue a écrit une belle regex Python multi-lignes avec commentaires utilisant `re.VERBOSE`. JS n'a pas un tel mode. Le convertisseur vous avertit dès le départ et montre la version aplatie que vous pouvez coller.
- Migrer entre versions Python. Vous avez écrit `(?<name>...)` en Python 3.12 et un collègue tourne encore en 3.10. Collez-le dans n'importe quel mode, le convertisseur le réécrit en `(?P<name>...)` plus sûr et ajoute un avertissement pour que le changement soit intentionnel.