Utilia

Regex-diagram (railroad)

Forvandl et regulært udtryk i JavaScript til et overskueligt railroad-diagram med grupper, alternativer og løkker, og eksportér det som SVG eller PNG.

Flag: vilkårlige af d g i m s u v y. Du kan også indsætte en literal som /\d+/g.

Indfangende grupper
–
Alternativer
–
Kvantorer
–

Railroad-diagram

Blå: literal tekst. Grøn: tegntyper og mængder (rød: udelukket mængde). Lilla: ankre og grænser. Orange: tilbagehenvisninger. Stiplede bokse: grupper og lookarounds. En sti over et element springer det over, en sti under gentager det.

Sådan visualiserer du et regulært udtryk

  1. Skriv eller indsæt dit mønster i Regulært udtryk. Du kan også indsætte en hel JavaScript-literal som /^\d{3}-\d{4}$/gm: skråstregerne fjernes, og flagene flyttes automatisk over i flagfeltet.
  2. Tilføj flag, hvis du har brug for dem (vilkårlige af d g i m s u v y). Flag ændrer, hvordan nogle dele tegnes: med m bliver ^ og $ til »linjens start« og »linjens slutning«; med s bliver punktummet til »vilkårligt tegn«.
  3. Diagrammet opdateres, mens du skriver. Tegn diagram tegner det om efter behov, og Næste eksempel går gennem nogle almindelige mønstre (e-mail, telefonnummer, hex-farve, pris, HTML-tag, webadresse).
  4. Læs diagrammet fra venstre mod højre, fra den udfyldte prik til prikken med ring. Hver sti, du kan følge, er en streng, som mønsteret kan matche.
  5. Brug Download SVG til et skarpt vektorbillede (dokumentation, slides), Download PNG til et billede i dobbelt opløsning, eller Kopiér SVG-kode for at indsætte koden på en webside.

Hold musen over en boks for at se den del af mønsteret, den stammer fra, og dens position.

Sådan læser du et railroad-diagram

Railroad-diagrammer, også kaldet syntaksdiagrammer, beskriver en grammatik som et sæt spor. Et regulært udtryk er netop sådan en grammatik, så tegningen viser dets opbygning langt bedre end en tæt række af symboler:

  • Blå bokse er literal tekst, der skal stå, som den er skrevet, for eksempel »@«.
  • Grønne bokse er tegntyper (\d ciffer, \w ordtegn, . vilkårligt tegn …) og tegnklasser. En klasse som [\w.+-] bliver til en boks med overskriften »et af«, der opregner hvert element; en negeret klasse [^…] er rød med overskriften »ingen af«.
  • Lilla piller er ankre og grænser: tekstens eller linjens start og slutning, \b ordgrænse. De matcher en position, ikke et tegn.
  • Orange stiplede bokse er tilbagehenvisninger som \1 eller \k<name>: den samme tekst, som en tidligere gruppe har matchet.
  • Stiplede rammer er grupper. Indfangende grupper nummereres efter rækkefølgen af deres startparentes (»gruppe nr. 2 »domain««); ikke-indfangende grupper (?:…) får ingen ramme. Lookaheads og lookbehinds får en lyserød ramme med teksten »efterfulgt af« eller »forudgået af«, fordi de tjekker teksten uden at bruge den.
  • Parallelle spor er alternativer adskilt af |.
  • Et spor over et element lader dig springe det over (?, *, {0,n}). Et spor under med en pil går tilbage og gentager det (+, *, {n,m}). Andre antal end de sædvanlige står under løkken, for eksempel »2 til 5 gange«, og dovne kvantorer (+?, *?) er markeret »doven«.

Fejlmeddelelser med position

Mønsteret kontrolleres af din browsers egen motor til regulære udtryk i JavaScript, så det, værktøjet accepterer, er præcis det, new RegExp() accepterer med de samme flag. Når motoren afviser det, peger værktøjet på det fejlbehæftede tegn med dets position og en markør under mønsteret. Det genkender en ) uden makker, en gruppe, der aldrig lukkes, en tegnklasse, der mangler sin ], en kvantor uden noget at gentage (*a, a|+), en enlig omvendt skråstreg til sidst og {n,m}-kvantorer, hvor n er større end m. Andre fejl, for eksempel en tilbagehenvisning til et gruppenavn, der ikke findes, vises med browserens egen meddelelse.

Udtrykket kompileres kun for at blive valideret: det køres aldrig mod nogen tekst, og intet forlader din browser.

Ofte stillede spørgsmål

Hvilken variant af regulære udtryk understøtter værktøjet?

Regulære udtryk i JavaScript (ECMAScript), herunder navngivne grupper, lookbehind, Unicode-egenskaber \p{…} og flaget v med indlejrede klasser. Mønstre fra PCRE, Python eller Java virker som regel også, men syntaks, der er specifik for de motorer, som possessive kvantorer eller (?P<name>…), afvises, fordi browseren ikke understøtter den.

Hvorfor bliver min ikke-indfangende gruppe ikke tegnet som en boks?

En gruppe som (?:\.[\w-]+) samler kun elementer, så en kvantor eller et alternativ gælder for dem alle. Den opretter ingen indfangning, så diagrammet viser dens indhold og løkke uden ramme, hvilket holder tegningen overskuelig. Grupper med inline-flag får en ramme og mærkes med de flag.

Hvad er forskellen på sporet, der springer over, og løkken?

Sporet over et element betyder, at »nul gange er tilladt«, og sporet under betyder, at »det må gentages«. ? har kun det øverste spor, + kun det nederste, og * har begge. For en kvantor som {2,4} har løkken teksten »2 til 4 gange«.

Kan jeg bruge diagrammet i min dokumentation?

Ja. SVG-eksporten er en selvstændig vektorfil med hvid baggrund og mørke linjer, ideel til README-filer, wikier og slides. PNG-eksporten tegnes i dobbelt størrelse i forhold til tegningen på skærmen, så den vises skarpt på skærme med høj pixeltæthed.

Er der en grænse for størrelsen?

Mønstre kan være op til 5.000 tegn lange. Meget lange udtryk giver et bredt diagram, som du kan rulle vandret i; hvis du deler dem op i navngivne dele, bliver både diagrammet og det regulære udtryk ofte lettere at vedligeholde.