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
- 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. - Ż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”. - 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).
- 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.
- 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,\wkarattru 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
\1jew\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.
Għodod relatati
- Ittestjar tar-Regex Ittestja espressjonijiet regolari JavaScript live b’taqbiliet enfasizzati, gruppi, sostituzzjoni u spjegazzjoni b’lingwaġġ sempliċi ta’ kull token.
- Esploratur AST tal-JavaScript Waħħal JavaScript u esplora s-siġra sintattika astratta tiegħu (ESTree, bl-Acorn) fil-brawżer tiegħek. Ikklikkja n-nodi u esporta l-AST bħala JSON.
- Formatter u validatur tal-JSON Formatter u validatur tal-JSON b’xejn li jibbewtifika, jimminimizza u jiċċekkja l-JSON fil-brawżer tiegħek, b’żbalji tas-sintassi bil-linja u l-kolonna.