Utilia

Regex dijagram toka (railroad)

Pretvori JavaScript regularni izraz u pregledan railroad dijagram sa grupama, alternativama, petljama i lookaround izrazima, pa ga izvezi kao SVG ili PNG.

Zastavice: bilo koje od d g i m s u v y. Možeš nalepiti i literal kao /\d+/g.

Grupe za hvatanje
–
Alternative
–
Kvantifikatori
–

Dijagram toka (railroad)

Plavo: doslovni tekst. Zeleno: tipovi znakova i skupovi (crveno: isključen skup). Ljubičasto: sidra i granice. Narandžasto: povratne reference. Isprekidani okviri: grupe i lookaround. Putanja iznad stavke preskače je, putanja ispod je ponavlja.

Kako se vizualizuje regularni izraz

  1. Upiši ili nalepi obrazac u Regularni izraz. Možeš nalepiti i ceo JavaScript literal kao /^\d{3}-\d{4}$/gm: kose crte se uklanjaju, a zastavice automatski prelaze u polje za zastavice.
  2. Dodaj zastavice ako ti trebaju (bilo koje od d g i m s u v y). Zastavice menjaju način crtanja nekih delova: sa m, ^ i $ postaju „početak reda“ i „kraj reda“; sa s, tačka postaje „bilo koji znak“.
  3. Dijagram se ažurira dok kucaš. Nacrtaj dijagram ga crta ponovo na zahtev, a Sledeći primer kruži kroz nekoliko uobičajenih obrazaca (e-pošta, broj telefona, heksadecimalna boja, cena, HTML oznaka, URL).
  4. Čitaj dijagram sleva nadesno, od popunjene tačke do tačke sa prstenom. Svaka putanja kojom možeš da prođeš je niz koji obrazac može da poklopi.
  5. Koristi Preuzmi SVG za oštru vektorsku sliku (dokumentacija, prezentacije), Preuzmi PNG za sliku u dvostrukoj rezoluciji ili Kopiraj SVG kod da nalepiš markup u veb-stranicu.

Pređi mišem preko okvira da vidiš deo obrasca iz kog potiče i njegovu poziciju.

Kako se čita railroad dijagram

Railroad dijagrami, zvani i sintaksni dijagrami, opisuju gramatiku kao skup staza. Regularni izraz je upravo takva gramatika, pa crtež pokazuje njegovu strukturu mnogo bolje od guste linije simbola:

  • Plavi okviri su doslovni tekst koji se mora pojaviti onako kako je napisan, na primer „@“.
  • Zeleni okviri su tipovi znakova (\d cifra, \w znak reči, . bilo koji znak…) i klase znakova. Klasa kao [\w.+-] postaje okvir sa naslovom „jedno od“ koji navodi svaku stavku; negirana klasa [^…] je crvena i ima naslov „nijedno od“.
  • Ljubičaste pilule su sidra i granice: početak i kraj teksta ili reda, \b granica reči. Poklapaju poziciju, a ne znak.
  • Narandžasti isprekidani okviri su povratne reference kao \1 ili \k<name>: isti tekst koji je ranije poklopila neka grupa.
  • Isprekidani okviri su grupe. Grupe za hvatanje se numerišu redom njihove otvorene zagrade („grupa #2 „domen““); grupe bez hvatanja (?:…) nemaju okvir. Lookahead i lookbehind dobijaju ružičast okvir sa oznakom „iza sledi“ ili „ispred je“, jer proveravaju tekst bez trošenja.
  • Paralelne staze su alternative razdvojene sa |.
  • Staza iznad stavke omogućava da je preskočiš (?, *, {0,n}). Staza ispod sa strelicom vraća se nazad da je ponovi (+, *, {n,m}). Brojevi različiti od uobičajenih upisuju se ispod petlje, na primer „2 do 5 puta“, a lenji kvantifikatori (+?, *?) označeni su sa „lenjo“.

Poruke o greškama sa pozicijama

Obrazac proverava sopstveni JavaScript mehanizam regularnih izraza u tvom pregledaču, pa ovaj alat prihvata tačno ono što new RegExp() prihvata sa istim zastavicama. Kada ga mehanizam odbije, alat pokazuje na sporni znak sa pozicijom i strelicom ispod obrasca. Prepoznaje nesparenu ), grupu koja nikada nije zatvorena, klasu znakova kojoj nedostaje ], kvantifikator bez čega da ponovi (*a, a|+), usamljenu kosu crtu na kraju i kvantifikatore {n,m} gde je n veće od m. Ostale greške, kao povratna referenca na ime grupe koje ne postoji, prikazuju se porukom pregledača.

Izraz se samo kompajlira radi provere: nikada se ne izvršava nad tekstom i ništa ne napušta tvoj pregledač.

Česta pitanja

Koji regex dijalekat ovaj alat podržava?

JavaScript (ECMAScript) regularne izraze, uključujući imenovane grupe, lookbehind, Unicode escape sekvence \p{…} i zastavicu v sa ugnežđenim klasama. Obrasci iz PCRE-a, Python-a ili Jave obično takođe rade, ali sintaksa specifična za te mehanizme, kao posesivni kvantifikatori ili (?P<name>…), odbija se jer je pregledač ne podržava.

Zašto moja grupa bez hvatanja nije nacrtana kao okvir?

Grupa kao (?:\.[\w-]+) samo grupiše stavke da bi se kvantifikator ili alternativa odnosili na sve njih. Ne pravi hvatanje, pa dijagram prikazuje njen sadržaj i petlju bez okvira, što crtež održava čitljivim. Grupe sa ugrađenim zastavicama imaju okvir i oznaku tih zastavica.

Koja je razlika između staze za preskakanje i petlje?

Staza iznad stavke znači „nula puta je dozvoljeno“, a staza ispod znači „može se ponavljati“. ? ima samo gornju stazu, + samo donju, a * obe. Za kvantifikator kao {2,4} petlja nosi oznaku „2 do 4 puta“.

Mogu li da koristim dijagram u svojoj dokumentaciji?

Da. SVG izvoz je samostalan vektorski fajl sa belom pozadinom i tamnim linijama, idealan za README fajlove, vikije i prezentacije. PNG izvoz se crta u dvostrukoj veličini od prikaza na ekranu radi oštrog prikaza na ekranima velike gustine.

Postoji li ograničenje veličine?

Obrasci mogu imati do 5.000 znakova. Veoma dugi izrazi daju širok dijagram koji možeš da pomeraš vodoravno; njihovo deljenje na imenovane delove često olakšava i dijagram i održavanje regexa.