Utilia

Diagramă feroviară pentru regex

Transformă o expresie regulată JavaScript într-o diagramă feroviară clară, cu grupuri, alternative, bucle și lookaround, apoi exportă-o ca SVG sau PNG.

Fanioane: oricare dintre d g i m s u v y. Poți lipi și un literal precum /\d+/g.

Grupuri de captură
–
Alternative
–
Cuantificatori
–

Diagramă feroviară

Albastru: text literal. Verde: tipuri de caractere și seturi (roșu: set exclus). Violet: ancore și limite. Portocaliu: referințe inverse. Casete întrerupte: grupuri și lookaround. O cale deasupra unui element îl sare, o cale dedesubt îl repetă.

Cum vizualizezi o expresie regulată

  1. Scrie sau lipește modelul în Expresie regulată. Poți lipi și un literal JavaScript complet, precum /^\d{3}-\d{4}$/gm: barele oblice sunt eliminate, iar fanioanele trec automat în câmpul de fanioane.
  2. Adaugă Fanioane dacă ai nevoie (oricare dintre d g i m s u v y). Fanioanele schimbă felul în care sunt desenate unele părți: cu m, ^ și $ devin „începutul liniei” și „sfârșitul liniei”; cu s, punctul devine „orice caracter”.
  3. Diagrama se actualizează pe măsură ce scrii. Desenează diagrama o redesenează la cerere, iar Exemplul următor parcurge câteva modele uzuale (e-mail, număr de telefon, culoare hex, preț, etichetă HTML, URL).
  4. Citește diagrama de la stânga la dreapta, de la punctul plin la punctul încercuit. Fiecare cale pe care o poți urma este un șir pe care modelul îl poate potrivi.
  5. Folosește Descarcă SVG pentru o imagine vectorială clară (documentație, prezentări), Descarcă PNG pentru o imagine la rezoluție dublă sau Copiază codul SVG ca să lipești codul într-o pagină web.

Ține cursorul peste o casetă ca să vezi partea din model din care provine și poziția ei.

Cum citești o diagramă feroviară

Diagramele feroviare, numite și diagrame sintactice, descriu o gramatică sub forma unui set de căi. O expresie regulată este exact o astfel de gramatică, așa că desenul îi arată structura mult mai bine decât un șir dens de simboluri:

  • Casetele albastre sunt text literal care trebuie să apară exact așa cum este scris, de exemplu „@”.
  • Casetele verzi sunt tipuri de caractere (\d cifră, \w caracter de cuvânt, . orice caracter…) și clase de caractere. O clasă precum [\w.+-] devine o casetă cu titlul „unul dintre” care listează fiecare element; o clasă negată [^…] este roșie și are titlul „niciunul dintre”.
  • Pastilele violete sunt ancore și limite: începutul și sfârșitul textului sau al liniei, limita de cuvânt \b. Ele potrivesc o poziție, nu un caracter.
  • Casetele portocalii întrerupte sunt referințe inverse, precum \1 sau \k<name>: același text ca al unui grup potrivit mai devreme.
  • Cadrele întrerupte sunt grupuri. Grupurile de captură sunt numerotate în ordinea parantezei lor deschise („grupul #2 „domain””); grupurile fără captură (?:…) nu sunt încadrate. Lookahead-urile și lookbehind-urile primesc un cadru roz cu eticheta „urmat de” sau „precedat de”, pentru că verifică textul fără să îl consume.
  • Căile paralele sunt alternative separate prin |.
  • O cale deasupra unui element îți permite să îl sari (?, *, {0,n}). O cale dedesubt, cu o săgeată, se întoarce ca să îl repete (+, *, {n,m}). Numărările diferite de cele uzuale sunt scrise sub buclă, de exemplu „de la 2 la 5×”, iar cuantificatorii leneși (+?, *?) sunt marcați „leneș”.

Mesaje de eroare cu poziții

Modelul este verificat de motorul de expresii regulate JavaScript al browserului tău, deci ceea ce acceptă acest instrument este exact ce acceptă new RegExp() cu aceleași fanioane. Când motorul îl respinge, instrumentul indică caracterul vinovat cu poziția lui și un cursor sub model. Recunoaște o ) fără pereche, un grup care nu este niciodată închis, o clasă de caractere căreia îi lipsește ], un cuantificator fără nimic de repetat (*a, a|+), o bară oblică inversă singură la final și cuantificatori {n,m} în care n este mai mare decât m. Alte erori, de exemplu o referință inversă la un nume de grup care nu există, sunt afișate cu mesajul browserului.

Expresia este doar compilată pentru validare: nu este rulată niciodată pe vreun text, iar nimic nu părăsește browserul tău.

Întrebări frecvente

Ce variantă de regex acceptă acest instrument?

Expresii regulate JavaScript (ECMAScript), inclusiv grupuri cu nume, lookbehind, secvențe de proprietăți Unicode \p{…} și fanionul v cu clase imbricate. Modelele din PCRE, Python sau Java funcționează de obicei și ele, dar sintaxa specifică acelor motoare, precum cuantificatorii posesivi sau (?P<name>…), este respinsă, deoarece browserul nu o acceptă.

De ce grupul meu fără captură nu este desenat ca o casetă?

Un grup precum (?:\.[\w-]+) doar grupează elemente, ca un cuantificator sau o alternare să se aplice tuturor. Nu creează nicio captură, așa că diagrama arată conținutul și bucla lui fără cadru, ceea ce păstrează desenul lizibil. Grupurile cu fanioane inline sunt încadrate și etichetate cu acele fanioane.

Care este diferența dintre calea de sărire și buclă?

Calea de deasupra unui element înseamnă „zero apariții sunt permise”, iar calea de dedesubt înseamnă „poate fi repetat”. ? are doar calea de sus, + doar pe cea de jos, iar * le are pe amândouă. Pentru un cuantificator precum {2,4}, bucla poartă eticheta „de la 2 la 4×”.

Pot folosi diagrama în documentația mea?

Da. Exportul SVG este un fișier vectorial de sine stătător, cu fundal alb și linii închise, ideal pentru fișiere README, wiki-uri și prezentări. Exportul PNG este randat la dublul mărimii desenului de pe ecran, pentru o afișare clară pe ecrane cu densitate mare.

Există o limită de mărime?

Modelele pot avea până la 5.000 de caractere. Expresiile foarte lungi produc o diagramă largă pe care o poți derula orizontal; împărțirea lor în părți cu nume face adesea mai ușor de întreținut atât diagrama, cât și regex-ul.