Teknobench

Dijagramma Railroad tar-Regex

Ibdel espressjoni regolari JavaScript f’dijagramma railroad ċara b’gruppi, alternattivi, loops u lookarounds, imbagħad esportaha bħala SVG jew PNG.

Flags: kwalunkwe minn d g i m s u v y. Tista’ wkoll twaħħal literal bħal /\d+/g.

Gruppi li jaqbdu
–
Alternattivi
–
Kwantifikaturi
–

Dijagramma railroad

Blu: test litterali. Aħdar: tipi ta’ karattri u settijiet (aħmar: sett eskluż). Vjola: ankri u konfini. Oranġjo: back-references. Kaxxi bit-tikek: gruppi u lookarounds. Triq fuq element tgħaddi minnu, triq taħtu tirrepetih.

Kif tiviżwalizza espressjoni regolari

  1. Ikteb jew waħħal il-mudell tiegħek f’Espressjoni regolari. Tista’ wkoll twaħħal literal sħiħ ta’ JavaScript bħal /^\d{3}-\d{4}$/gm: is-slashes jitneħħew u l-flags jgħaddu awtomatikament fil-kaxxa tal-flags.
  2. Żid flags jekk teħtieġhom (kwalunkwe minn d g i m s u v y). Il-flags ibiddlu kif jinġibdu xi partijiet: b’m, ^ u $ isiru “bidu tal-linja” u “tmiem il-linja”; b’s, il-punt isir “kwalunkwe karattru”.
  3. Id-dijagramma tiġi aġġornata hekk kif tikteb. Iġbed id-dijagramma terġa’ tiġbidha fuq talba, u Eżempju li jmiss jgħaddi minn ftit mudelli komuni (email, numru tat-telefon, kulur eżadeċimali, prezz, tag HTML, URL).
  4. Aqra d-dijagramma mix-xellug lejn il-lemin, mill-punt mimli sal-punt bi ċrieki. Kull triq li tista’ ssegwi hija string li l-mudell jista’ jaqbel magħha.
  5. Uża Niżżel SVG għal immaġni vettorjali ċara (dokumentazzjoni, slides), Niżżel PNG għal stampa b’riżoluzzjoni doppja, jew Ikkopja l-kodiċi SVG biex twaħħal il-markup f’paġna web.

Poġġi l-maws fuq kaxxa biex tara l-parti tal-mudell li minnha tiġi u l-pożizzjoni tagħha.

Kif taqra dijagramma railroad

Id-dijagrammi railroad, imsejħa wkoll dijagrammi tas-sintassi, jiddeskrivu grammatika bħala sett ta’ binarji. Espressjoni regolari hija eżattament grammatika bħal din, għalhekk id-disinn juri l-istruttura tagħha ferm aħjar minn linja densa ta’ simboli:

  • Kaxxi blu huma test litterali li jrid jidher kif inhu miktub, per eżempju “@”.
  • Kaxxi ħodor huma tipi ta’ karattri (\d ċifra, \w karattru ta’ kelma, . kwalunkwe karattru…) u klassijiet ta’ karattri. Klassi bħal [\w.+-] issir kaxxa b’intestatura “wieħed minn” li telenka kull element; klassi negata [^…] hija ħamra b’intestatura “xejn minn”.
  • Pillows vjola huma ankri u konfini: bidu u tmiem tat-test jew tal-linja, konfini ta’ kelma \b. Jaqblu ma’ pożizzjoni, mhux ma’ karattru.
  • Kaxxi oranġjo bit-tikek huma back-references bħal \1 jew \k<name>: l-istess test li grupp qabbel qabel.
  • Frejms bit-tikek huma gruppi. Il-gruppi li jaqbdu huma nnumerati fl-ordni tal-parentesi tal-ftuħ tagħhom (“grupp #2 “domain””); il-gruppi li ma jaqbdux (?:…) m’għandhomx frejm. Il-lookaheads u l-lookbehinds jingħataw frejm roża bit-tikketta “segwit minn” jew “preċedut minn”, għax jiċċekkjaw it-test mingħajr ma jikkunsmawh.
  • Binarji paralleli huma alternattivi separati b’|.
  • Triq fuq element tħallik tgħaddi minnu (?, *, {0,n}). Triq taħt b’vleġġa terġa’ lura biex tirrepetih (+, *, {n,m}). Għadd differenti mis-soltu jinkiteb taħt il-loop, bħal “2 sa 5 darbiet”, u l-kwantifikaturi lazy (+?, *?) huma mmarkati “lazy”.

Messaġġi ta’ żball bil-pożizzjoni

Il-mudell jiġi ċċekkjat mill-magna tal-espressjonijiet regolari JavaScript tal-brawżer tiegħek stess, għalhekk dak li din l-għodda taċċetta huwa eżattament dak li new RegExp() jaċċetta bl-istess flags. Meta l-magna tirrifjutah, l-għodda tindika l-karattru ħażin bil-pożizzjoni tiegħu u b’caret taħt il-mudell. Tagħraf ) mingħajr par, grupp li qatt ma jingħalaq, klassi tal-karattri li ma għandhiex ], kwantifikatur mingħajr xejn x’jirrepeti (*a, a|+), backslash waħdu fl-aħħar u kwantifikaturi {n,m} fejn n huwa akbar minn m. Żbalji oħra, bħal back-reference għal isem ta’ grupp li ma jeżistix, jintwerew bil-messaġġ tal-brawżer.

L-espressjoni tiġi kkompilata biss biex tiġi vvalidata: ma titħaddem qatt fuq ebda test, u xejn ma jħalli l-brawżer tiegħek.

Mistoqsijiet frekwenti

Liema flavour ta’ regex tappoġġja din l-għodda?

Espressjonijiet regolari JavaScript (ECMAScript), inklużi gruppi bl-isem, lookbehind, Unicode property escapes \p{…} u l-flag v b’klassijiet imdaħħlin. Mudelli minn PCRE, Python jew Java normalment jaħdmu wkoll, iżda sintassi speċifika għal dawk il-magni, bħal kwantifikaturi possessivi jew (?P<name>…), tiġi rrifjutata għax il-brawżer ma jappoġġjahiex.

Għaliex il-grupp tiegħi li ma jaqbadx ma jidhirx bħala kaxxa?

Grupp bħal (?:\.[\w-]+) jiggruppa biss l-elementi biex kwantifikatur jew alternattiva japplikaw għalihom kollha. Ma joħloq ebda qbid, għalhekk id-dijagramma turi l-kontenut u l-loop tiegħu mingħajr frejm, biex id-disinn jibqa’ jinqara. Gruppi b’flags inline għandhom frejm u tikketta b’dawk il-flags.

X’inhi d-differenza bejn it-triq tal-iskip u l-loop?

It-triq fuq element tfisser “żero darbiet huwa permess”, u t-triq taħtu tfisser “jista’ jiġi ripetut”. ? għandu biss it-triq ta’ fuq, + biss dik ta’ isfel, u * għandu t-tnejn. Għal kwantifikatur bħal {2,4}, il-loop iġorr it-tikketta “2 sa 4 darbiet”.

Nista’ nuża d-dijagramma fid-dokumentazzjoni tiegħi?

Iva. L-esportazzjoni SVG hija fajl vettorjali awtonomu b’sfond abjad u linji skuri, ideali għal fajls README, wikis u slides. L-esportazzjoni PNG tiġi rrenderjata b’darbtejn id-daqs tad-disinn fuq l-iskrin għal wiri ċar fuq skrins ta’ densità għolja.

Hemm limitu ta’ daqs?

Il-mudelli jistgħu jkunu twal sa 5,000 karattru. Espressjonijiet twal ħafna jipproduċu dijagramma wiesgħa li tista’ tiskrolla orizzontalment; li tqassamhom f’partijiet bl-isem spiss jagħmel kemm id-dijagramma kif ukoll ir-regex aktar faċli biex jinżammu.