Utilia

Regex-visualiserare

Gör om ett reguljärt uttryck i JavaScript till ett tydligt järnvägsdiagram med grupper, alternativ, loopar och lookarounds och exportera som SVG eller PNG.

Flaggor: valfria av d g i m s u v y. Du kan också klistra in en literal som /\d+/g.

Fångande grupper
–
Alternativ
–
Kvantifierare
–

Järnvägsdiagram

Blått: literal text. Grönt: teckentyper och teckenklasser (rött: uteslutna tecken). Lila: ankare och gränser. Orange: bakåtreferenser. Streckade rutor: grupper och lookarounds. Ett spår ovanför ett element hoppar över det, ett spår under upprepar det.

Så visualiserar du ett reguljärt uttryck

  1. Skriv eller klistra in ditt mönster i Reguljärt uttryck. Du kan också klistra in en hel JavaScript-literal som /^\d{3}-\d{4}$/gm: snedstrecken tas bort och flaggorna flyttas automatiskt till flaggrutan.
  2. Lägg till flaggor om du behöver dem (valfria av d g i m s u v y). Flaggorna ändrar hur vissa delar ritas: med m blir ^ och $ ”radens början” och ”radens slut”, och med s blir punkten ”valfritt tecken”.
  3. Diagrammet uppdateras medan du skriver. Rita diagram ritar om det vid behov, och Nästa exempel bläddrar mellan några vanliga mönster (e-post, telefonnummer, hexfärg, pris, HTML-tagg, URL).
  4. Läs diagrammet från vänster till höger, från den fyllda pricken till pricken med ring. Varje väg du kan följa motsvarar en sträng som mönstret kan matcha.
  5. Använd Ladda ner SVG för en skarp vektorbild (dokumentation, presentationer), Ladda ner PNG för en bild i dubbel upplösning eller Kopiera SVG-kod för att klistra in koden på en webbsida.

Håll muspekaren över en ruta för att se vilken del av mönstret den kommer från och dess position.

Så läser du ett järnvägsdiagram

Järnvägsdiagram (railroad diagrams), även kallade syntaxdiagram, beskriver en grammatik som ett nät av spår. Ett reguljärt uttryck är just en sådan grammatik, så ritningen visar strukturen mycket bättre än en kompakt rad med symboler:

  • Blå rutor är literal text som måste förekomma exakt som den står, till exempel ”@”.
  • Gröna rutor är teckentyper (\d siffra, \w ordtecken, . valfritt tecken …) och teckenklasser. En klass som [\w.+-] blir en ruta med rubriken ”ett av” som listar varje element. En negerad klass [^…] är röd och har rubriken ”inget av”.
  • Lila piller är ankare och gränser: början och slut på text eller rad, \b ordgräns. De matchar en position, inte ett tecken.
  • Orange streckade rutor är bakåtreferenser som \1 eller \k<name>: samma text som en grupp har matchat tidigare.
  • Streckade ramar är grupper. Fångande grupper numreras i den ordning deras vänsterparentes står (”grupp #2 ”domain””), medan icke-fångande grupper (?:…) inte får någon ram. Lookahead och lookbehind får en rosa ram märkt ”följs av” eller ”föregås av”, eftersom de kontrollerar texten utan att förbruka den.
  • Parallella spår är alternativ åtskilda av |.
  • Ett spår ovanför ett element låter dig hoppa över det (?, *, {0,n}). Ett spår under med en pil går tillbaka för att upprepa det (+, *, {n,m}). Andra antal än de vanliga skrivs under loopen, till exempel ”2 till 5 gånger”, och lata kvantifierare (+?, *?) märks med ”lat”.

Felmeddelanden med position

Mönstret kontrolleras av webbläsarens egen motor för reguljära uttryck i JavaScript, så det verktyget godtar är exakt det som new RegExp() godtar med samma flaggor. När motorn avvisar mönstret pekar verktyget ut det felande tecknet med dess position och en markör under mönstret. Det känner igen en ) utan motsvarighet, en grupp som aldrig stängs, en teckenklass som saknar ], en kvantifierare utan något att upprepa (*a, a|+), ett ensamt omvänt snedstreck i slutet och kvantifierare {n,m} där n är större än m. Andra fel, som en bakåtreferens till ett gruppnamn som inte finns, visas med webbläsarens eget meddelande.

Uttrycket kompileras bara för att valideras: det körs aldrig mot någon text, och inget lämnar din webbläsare.

Vanliga frågor

Vilken regex-variant stöder verktyget?

Reguljära uttryck i JavaScript (ECMAScript), inklusive namngivna grupper, lookbehind, Unicode-egenskaper \p{…} och flaggan v med nästlade klasser. Mönster från PCRE, Python eller Java fungerar oftast också, men syntax som är unik för de motorerna, som possessiva kvantifierare eller (?P<name>…), avvisas eftersom webbläsaren inte stöder den.

Varför ritas min icke-fångande grupp inte som en ruta?

En grupp som (?:\.[\w-]+) grupperar bara element så att en kvantifierare eller ett alternativ gäller alla. Den skapar ingen fångst, så diagrammet visar innehållet och loopen utan ram, vilket håller ritningen läsbar. Grupper med inline-flaggor får en ram märkt med flaggorna.

Vad är skillnaden mellan hoppspåret och loopen?

Spåret ovanför ett element betyder ”noll gånger är tillåtet”, och spåret under betyder ”det får upprepas”. ? har bara det övre spåret, + bara det nedre och * har båda. För en kvantifierare som {2,4} får loopen etiketten ”2 till 4 gånger”.

Kan jag använda diagrammet i min dokumentation?

Ja. SVG-exporten är en fristående vektorfil med vit bakgrund och mörka linjer, perfekt för README-filer, wikier och presentationer. PNG-exporten renderas i dubbla storleken jämfört med ritningen på skärmen, så att den blir skarp på skärmar med hög pixeltäthet.

Finns det någon storleksgräns?

Mönster får vara upp till 5 000 tecken långa. Mycket långa uttryck ger ett brett diagram som du kan rulla i sidled. Att dela upp dem i namngivna delar gör ofta både diagrammet och regexet lättare att underhålla.