Mis see tööriist on?
Regulaaravaldis (regex) on kompaktne mustrikeel teksti leidmiseks, valideerimiseks ja väljavõtmiseks: e-posti muster saab valideerida vorminvestimist, \d{4}-\d{2}-\d{2} leiab kuupäevi ja püüdegrupid tõmbavad välja just need osad, mida vajad. Peaaegu iga programmeerimiskeel ja tekstiredaktor toetab regexit.
See testija kasutab JavaScripti regex-mootorit — sama, mis töötab Node.js-is ja igas brauseris —, seega siin loodud mustrid käituvad identselt su JavaScripti/TypeScripti koodis. Enamik mustreid töötab muutmata kujul ka Pythonis, Javas ja Go-s.
Miks seda kasutada?
- Reaalajas tagasiside: vasted tõstetakse kollasega esile mustri kirjutamise ajal.
- Püüdegrupid kuvatakse iga vaste kohta — näe täpselt, mis jääb $1 ja $2 sisse.
- Täielik lippude tugi: g (kõik vasted), i (tõstutundetu), m (mitmerealine), s (punkt vastab reavahetusele), u (unicode).
- Selged veateated, kui mustris on süntaksiviga.
- Tasuta ja privaatne — muster ja tekst ei lahku kunagi su brauserist.
Kuidas kasutada
- Kirjuta oma muster kahe / märgi vahele (kaldjooni endal varjestama ei pea).
- Kohanda lippe väikeses kastis pärast teist /-i — vaikimisi g leiab kõik vasted.
- Kleebi oma testtekst alla.
- Vasted tõstetakse kohe esile; püüdegrupid on loetletud allpool.
- Kui muster on vigane, selgitab veateade, mis valesti on.
Näide
Sisend
Muster: (\w+)@(\w+)\.com
Testtekst: Contact alice@example.com or bob@test.comTulemus
✓ 2 vastet
#1 grupid: $1=alice $2=example
#2 grupid: $1=bob $2=testSulud loovad püüdegrupid, millele saad viidata kui $1 ja $2 asendustes.
Praktilised nõuanded
- Valideerid e-posti sisendit? ^[^\s@]+@[^\s@]+\.[^\s@]+$ on leebe muster, mis püüab kinni ilmsed kirjavead, ilma et lükkaks tagasi kehtivaid, kuid ebatavalisi aadresse — täielik RFC 5322 vastavus vajab teeki, mitte üherealist mustrit.
- Võtad päringuparameetreid URL-ist välja: [?&]([^=]+)=([^&]*) koos g lipuga, seejärel loe $1/$2 iga vaste kohta, selle asemel et käsitsi tükeldada & ja = järgi.
- Kavatsed kasutada mustrit .replace()-is? Testi seda enne siin — see, mis siin esile tõuseb, on täpselt see, mida .replace() puudutab, koos püüdegruppidega.
- Parsid mitmerealisi logisid (vastad ajatemplile iga rea alguses)? Lisa m lipp, et ^ ja $ ankurduksid rea, mitte kogu stringi kaupa.
- Kopeerisid mustri Pythonist või PHP-st ja see siin ei vasta? Kontrolli (?P<name>...) nimelisi gruppe — JavaScript kasutab (?<name>...), ilma P-ta — või possessiivseid kvantoreid (++, *+), mida JavaScripti regexis pole.
JavaScripti regexi testija, mitte üldine
See tööriist käivitab JavaScripti sisseehitatud RegExp-mootorit — täpselt sama koodirada, mis on str.match(pattern) või pattern.test(str) taga brauseri konsoolis või Node.js-is. See erineb testimisest PCRE vastu (mida kasutab PHP ja millele paljud "universaalsed" regexi testijad vaikimisi lähevad) või Pythoni re moodulist: JavaScriptis pole possessiivseid kvantoreid ega atomaargruppe ning nimelised püüdegrupid kasutavad (?<name>...), mitte PCRE/Pythoni (?P<name>...).
Kui kavatsed mustri panna JS-i või TypeScripti koodi — vorminvestimine, marsruudi sobitaja, logiparser —, siis selle siin testimine tähendab null murraku-erinevusi: see, mis sellel lehel esile tõuseb, on täpselt see, millele new RegExp(pattern, flags) käiku minnes vastab.
Kuhu see päris töövoogudesse sobitub
Regexi test seisab harva üksinda. Tavaline järjekord: kinnita muster siin, käivita tegelik .replace() oma koodis ja seejärel võrdle enne/pärast teksti erinevust, et veenduda, et asendus tegi täpselt seda, mida ootasid, ja mitte midagi muud.
Struktureeritud andmete väljavõtmine püüdegruppidega läheb sageli otse JSON-i — vormista väljavõetud tulemus, et kontrollida, kas see parsiti nii, nagu ootasid.
Korduma kippuvad küsimused
Millist regexi murrakut see testija kasutab?
JavaScripti (ECMAScript) mootorit, mis töötab igas brauseris ja Node.js-is. Põhisüntaks on ülekantav, kuid mõned omadused erinevad keeleti — nt lookbehind tugi ja nimeliste gruppide süntaks erinevad Pythonis ja Javas.
Miks minu muster leiab ainult esimese vaste?
Puudu on g (globaalne) lipp. Ilma g-ta peatub regex pärast esimest vastet. See tööriist kasutab vaikimisi g-d — kontrolli, et sa poleks seda eemaldanud.
Miks . ei vasta minu reavahetustele?
Vaikimisi vastab . mistahes märgile peale reavahetuse. Lisa s lipp (dotall), et . vastaks ka reavahetustele, või kasuta [\s\S]-i ülekantava alternatiivina.
Mida tähendavad püüdegruppide tulemused?
Iga sulgude paar su mustris püüab kinni teksti, millele see vastas. $1 on esimene grupp, $2 teine ja nii edasi — nendele viitad asendamise ja väljavõtmise koodis.
Miks on mu regex aeglane või hangub?
Tõenäoliselt on põhjuseks katastroofiline tagasijälitamine (backtracking), mille põhjustavad pesastatud kvantorid nagu (a+)+ mittevastaval sisendil. Kirjuta muster ümber, et vältida mitmetähenduslikku korduvust. See tööriist piirab tulemuse 1000 vastega, et püsida kiirena.