Regex z JavaScript po jednej stronie, Python `re` po drugiej. Bez tłumaczenia w głowie.
Napisałeś regex w JavaScript: `/(\w+)@(\w+\.com)/gi`. Teraz potrzebujesz tego samego patternu w skrypcie Pythona. Siedzisz dziesięć minut i zastanawiasz się, czy `i` zamienia się na `re.I`, czy na `re.IGNORECASE`, czy nazwane grupy działają tak samo, czy Python rozumie lookbehind tak jak JS. Niepotrzebne tarcie, za każdym razem.
Wklejasz regex JS po lewej, dostajesz `re.compile(r"...", re.IGNORECASE)` po prawej. Z poprawnie zmapowanymi flagami, poprawną składnią nazwanych grup (`(?<name>...)` → `(?P<name>...)`) i listą ostrzeżeń, kiedy coś nie tłumaczy się 1:1: lookbehind o zmiennej szerokości, grupy atomic, flaga sticky `y`, flaga globalna `g`.
Trzy tryby w jednym narzędziu: JS → Python, Python → JS oraz inline `(?i)` ↔ `re.IGNORECASE` na moment, kiedy musisz tylko odczytać czyjś pattern. Plus tester na żywo pod każdym panelem: wklejasz tekst, widzisz dopasowania podświetlone, jednym kliknięciem kopiujesz wynik. Wszystko dzieje się w przeglądarce, pattern nigdzie nie wychodzi.
Jak używać
- Wybierz tryb na pasku na górze: JS → Python, jeśli masz regex z JavaScript i potrzebujesz Pythona, Python → JS w drugą stronę, Flagi inline ↔ re.flags, kiedy chcesz tylko przetłumaczyć zapis flag.
- Wklej pattern po lewej. Dla JS akceptujemy pełny literał (`/.../flags`) albo samo ciało, parser sam rozpozna. Dla Pythona wklej albo raw pattern, albo pełne `re.compile(r"...", re.I | re.M)`.
- Czytaj prawy panel. Dostajesz przekonwertowany kod w bloku gotowym do skopiowania, z flagami przetłumaczonymi na drugi silnik.
- Sprawdź sekcję ostrzeżeń. Każda różnica, która ma znaczenie (flaga `g`, sticky, szerokość lookbehindu, składnia nazwanych grup), pojawia się jako krótka notatka, żebyś wiedział, na co uważać.
- Zmień format wyjścia. Dla Pythona możesz wybrać pełne `re.compile(...)` albo sam pattern + listę flag. Dla JS literał `/.../flags` albo `new RegExp("...", "...")`. Wybierasz, co dokładnie chcesz wkleić.
- Użyj testera na dole: wklejasz tekst, silnik uruchamia regex na żywo i podświetla dopasowania. Uwaga, tester po obu stronach działa na silniku JavaScript, zaawansowane konstrukcje zachowują się tak jak w V8.
- Kliknij przykład pod inputem, żeby wypełnić typowy case (email, URL, data z nazwanymi grupami, lookbehind). Dobre na szybkie sprawdzenie konwertera, zanim zaufasz mu z własnym patternem.
Kiedy się przydaje
Pięć sytuacji, w których konwerter oszczędza pięć do piętnastu minut i otwartej zakładki ze Stack Overflow:
- Przenosisz walidator z frontu na backend. Masz regex JS do emaila albo numeru telefonu w formularzu, potrzebujesz tego samego sprawdzenia w endpoincie Pythona. Wklej, dostań `re.compile(...)`, ostrzeżenia powiedzą, czy flaga `g` ma znaczenie i czy twoje nazwane grupy zadziałają na docelowej wersji Pythona.
- Czytasz skrypt w języku, w którym normalnie nie piszesz. Dostałeś `scraper.py` pełen `re.findall(r"(?P<title>.+?)</h1>", html, re.S)` i chcesz szybko przetestować pattern w DevTools. Wklej w trybie Python → JS, skopiuj literał `/.../`, wrzuć do konsoli przeglądarki.
- Tłumaczysz odpowiedzi ze Stack Overflow. Połowa odpowiedzi o regexie w internecie używa składni Pythona, nawet jeśli pytanie było o JS, i na odwrót. Konwerter jest szybszy niż ręczne przepisywanie i wyłapuje pułapki w stylu `(?P<name>...)`, które inaczej byś przeoczył.
- Pracujesz z flagą `x` / `re.VERBOSE`. Kolega napisał ładny wieloliniowy regex Pythona z komentarzami w `re.VERBOSE`. JS nie ma takiego trybu. Konwerter ostrzeże od razu i pokaże spłaszczoną wersję gotową do wklejenia.
- Migrujesz między wersjami Pythona. Napisałeś `(?<name>...)` w Pythonie 3.12, kolega odpala wciąż 3.10. Wklej w dowolnym trybie, konwerter przepisze na bezpieczniejsze `(?P<name>...)` i doda ostrzeżenie, żeby zmiana była świadoma.