Regex-visualisering (jernbanediagram)
Gjør et regulært uttrykk i JavaScript om til et tydelig jernbanediagram med grupper, alternativer, løkker og lookarounds, og eksporter det som SVG eller PNG.
Flagg: hvilke som helst av d g i m s u v y. Du kan også lime inn en literal som /\d+/g.
- Fangstgrupper
- –
- Alternativer
- –
- Kvantifikatorer
- –
Jernbanediagram
Blå: bokstavelig tekst. Grønn: tegntyper og tegnsett (rød: ekskludert sett). Lilla: ankere og grenser. Oransje: tilbakereferanser. Stiplede bokser: grupper og lookarounds. En bane over et element hopper over det, en bane under gjentar det.
Slik visualiserer du et regulært uttrykk
- Skriv eller lim inn mønsteret ditt i Regulært uttrykk. Du kan også lime inn en hel JavaScript-literal som
/^\d{3}-\d{4}$/gm: skråstrekene fjernes, og flaggene flyttes automatisk til flaggfeltet. - Legg til flagg hvis du trenger dem (hvilke som helst av
d g i m s u v y). Flaggene endrer hvordan noen deler tegnes: medmblir^og$til «start på linjen» og «slutt på linjen», og medsblir punktumet til «alle tegn». - Diagrammet oppdateres mens du skriver. Tegn diagram tegner det på nytt ved behov, og Neste eksempel går gjennom noen vanlige mønstre (e-post, telefonnummer, heksadesimal farge, pris, HTML-tagg, URL).
- Les diagrammet fra venstre mot høyre, fra den fylte prikken til prikken med ring. Hver bane du kan følge, er en streng mønsteret kan treffe.
- Bruk Last ned SVG for et skarpt vektorbilde (dokumentasjon, presentasjoner), Last ned PNG for et bilde i dobbel oppløsning, eller Kopier SVG-kode for å lime inn koden på en nettside.
Hold musepekeren over en boks for å se hvilken del av mønsteret den kommer fra, og posisjonen.
Slik leser du et jernbanediagram
Jernbanediagrammer, også kalt syntaksdiagrammer, beskriver en grammatikk som et sett med spor. Et regulært uttrykk er nettopp en slik grammatikk, så tegningen viser strukturen langt bedre enn en tett rekke med symboler:
- Blå bokser er bokstavelig tekst som må stå akkurat slik, for eksempel
«@». - Grønne bokser er tegntyper (
\dsiffer,\wordtegn,.alle tegn …) og tegnklasser. En klasse som[\w.+-]blir en boks med overskriften «ett av» som lister hvert element. En negert klasse[^…]er rød og har overskriften «ingen av». - Lilla piller er ankere og grenser: start og slutt på tekst eller linje,
\bordgrense. De treffer en posisjon, ikke et tegn. - Oransje stiplede bokser er tilbakereferanser som
\1eller\k<name>: samme tekst som en gruppe som traff tidligere. - Stiplede rammer er grupper. Fangstgrupper nummereres i rekkefølgen av åpningsparentesene («gruppe #2 ‹domain›»). Ikke-fangende grupper
(?:…)får ingen ramme. Lookaheads og lookbehinds får en rosa ramme merket «etterfulgt av» eller «foran står», fordi de sjekker teksten uten å bruke den opp. - Parallelle spor er alternativer atskilt med
|. - Et spor over et element lar deg hoppe over det (
?,*,{0,n}). Et spor under med en pil går tilbake for å gjenta det (+,*,{n,m}). Andre antall enn de vanlige skrives under løkken, for eksempel «2 til 5 ganger», og late kvantifikatorer (+?,*?) er merket «lat».
Feilmeldinger med posisjon
Mønsteret sjekkes av nettleserens egen motor for regulære uttrykk i JavaScript, så det verktøyet godtar, er nøyaktig det new RegExp() godtar med de samme flaggene. Når motoren avviser det, peker verktøyet på tegnet det gjelder, med posisjon og en markør under mønsteret. Det kjenner igjen en ) uten tilhørende (, en gruppe som aldri lukkes, en tegnklasse som mangler ], en kvantifikator uten noe å gjenta (*a, a|+), en enslig omvendt skråstrek på slutten og {n,m}-kvantifikatorer der n er større enn m. Andre feil, for eksempel en tilbakereferanse til et gruppenavn som ikke finnes, vises med nettleserens egen melding.
Uttrykket kompileres bare for å bli validert: det kjøres aldri mot noen tekst, og ingenting forlater nettleseren din.
Ofte stilte spørsmål
Hvilken regex-variant støtter verktøyet?
Regulære uttrykk i JavaScript (ECMAScript), inkludert navngitte grupper, lookbehind, Unicode-egenskaper \p{…} og v-flagget med nestede klasser. Mønstre fra PCRE, Python eller Java fungerer ofte også, men syntaks som er spesifikk for de motorene, for eksempel possessive kvantifikatorer eller (?P<name>…), avvises fordi nettleseren ikke støtter den.
Hvorfor tegnes ikke den ikke-fangende gruppen min som en boks?
En gruppe som (?:\.[\w-]+) grupperer bare elementer slik at en kvantifikator eller et alternativ gjelder for alle sammen. Den lager ingen fangst, så diagrammet viser innholdet og løkken uten ramme, noe som holder tegningen lesbar. Grupper med flagg i selve uttrykket får ramme og er merket med flaggene.
Hva er forskjellen på hoppesporet og løkken?
Sporet over et element betyr «null ganger er tillatt», og sporet under betyr «det kan gjentas». ? har bare det øvre sporet, + bare det nedre, og * har begge. For en kvantifikator som {2,4} har løkken merkelappen «2 til 4 ganger».
Kan jeg bruke diagrammet i dokumentasjonen min?
Ja. SVG-eksporten er en selvstendig vektorfil med hvit bakgrunn og mørke linjer, ideell for README-filer, wikier og presentasjoner. PNG-eksporten tegnes i dobbel størrelse sammenlignet med tegningen på skjermen, for skarp visning på skjermer med høy tetthet.
Er det en størrelsesgrense?
Mønstre kan være opptil 5 000 tegn lange. Svært lange uttrykk gir et bredt diagram du kan rulle sideveis i. Å dele dem opp i navngitte deler gjør ofte både diagrammet og regexen enklere å vedlikeholde.
Relaterte verktøy
- Regex-tester Test regulære uttrykk i JavaScript live, med uthevede treff, fangstgrupper, erstatning og en forklaring på vanlig norsk av hvert enkelt element i mønsteret.
- JavaScript AST-utforsker Lim inn JavaScript og utforsk det abstrakte syntakstreet (ESTree, analysert med Acorn) i nettleseren din. Klikk på noder, se koden og eksporter AST som JSON.
- JSON-formaterer og -validator Gratis JSON-formaterer og -validator som gjør JSON ryddig, minifiserer og kontrollerer den i nettleseren din, med syntaksfeil oppgitt med linje og kolonne.