Andrise programmeerimisalane WIKI
Regulaaravaldised
Sarnaselt paljudele teistele programmeerimiskeeltele, sisaldab ka JavaScript regulaaravaldisi. Regulaaravaldis on string, mis kirjeldab või langeb kokku mingi stringide hulgaga vastavalt kindlatele süntaksireeglitele. Tegu on omamoodi mustriga, mida saab rakendada erinevatele tekstidele, kontrollimaks nende tekstide vastavust. Üks võimalik kasutusvaldkond on näiteks vormielementide sisu kontroll vormide täitmisel - kas e-posti väljale sisestatud string näeb ikka e-posti aadressi moodi välja või kas soovitud kasutajanimi on piisavalt pikk ja sisaldab vaid lubatud sümboleid. Kõige selle jaoks ongi kasutada regulaaravaldised.
JavaScriptis on regulaaravaldised esitatavad RegExp objektidena. Sellist objekti saab kasutada näiteks stringi meetodi match parameetrina.
if ("tekst" .match(/ks/)){ alert('Leiti tekstiline vaste "ks"!'); }
RegExp objekt
RegExp objekti saab luua kahel viisil. Esiteks läbi RegExp konstruktori ning teiseks regulaaravalidise literaalina. Konstruktoriga luues on regulaaravaldise loomise süntaks järgmine:
var re = new RegExp("muster","lipud");
Kus muster tähistab regulaaravaldisele vastavat mustrit ning lipud tähistavad erinevaid seadeid, millega mustri kontrollimisel arvestatakse. Näiteks võib olla selleks väike täht i, mis tähistab tähesuuruse ignoreerimist.
Regulaaravaldise literaaliks on sarnaselt teistele keeltele kaldkriipsud.
var re = /muster/lipud;
NB! Kummagi süntaksi korral ei ole lippude määramine kohustuslik, lihtsamate avaldiste puhul võib need vajadusel ära jätta.
Regulaaravaldise lipud
g - globaalne vaste
Lipu g kasutamisel, tagastab regulaaravaldis kõik vasted, vastasel juhul aga ainult esimese.
console.log("tekskskst" .match(/ks/g)); // ["ks", "ks", "ks"]
i - ignoreeri tähesuurust
Kui regulaaravaldis kasutab lippu i, ei arvestata teksti kontrollil tähesuurust.
console.log("tekskskst" .match(/KS/i)); // ["ks"]
m - mitu rida
Regulaaravaldis arvestab rea alguse ja lõpu märgistuse sümboleid (^ ning $) mitte string alguse ja lõpu juures, vaid iga rea korral eraldi.
console.log("abc\ndef\nghi".match(/^def$/m)); // ["def"]
Erimärgid regulaaravaldises
Regulaaravaldises saab kasutada mitmeid erimärke, mis aitavadki moodustada nn. mustri. Näiteks sümbol ^, mis tähistab stringi algust (või rea algust, kui on kasutatud lippu m).
| Sümbol | Selgitus |
|---|---|
\ | Erimärk \ on kasutusel sarnaselt stringide defineerimisel erisümbolite muutmisel nende märgilisele kujule. Näiteks juhul kui otsime stringist märki ^, siis ei saa seda kirjutada kujul /^/, kuna see tähistaks ^ asemel hoopis rea algust. Sama süboli koos erimärgiga \ esitamisel otsitakse aga sümbolit tema tekstilisel kujul /\^/. |
^ | Erimärk tähistab stringi algust. Juhul kui kasutusel on lipp m, tähistab see ka üksikute ridade algust stringis. Sellele sümbolile järgnev peab asuma stringi alguses. |
$ | Erimärk tähistab stringi lõppu. Juhul kui kasutusel on lipp m, tähistab see ka üksikute ridade lõppu stringis. Sellele sümbolile eelnev peab asuma stringi lõpus. |
* | * vastab eelnenud elemendile 0 või rohkem kordi. Näiteks /abc*/ vastab stringile „abc“ ning „abccccc“. |
+ | Erimärk + vastab eelnenud elemendile 1 või rohkem kordi. |
? | ? vastab eelnenud elemendile 0 või 1 korra. /abc?/ vastab nii stringile klaabu kui ka abcdef. Juhul kui erimärki ? kasutatakse peale erimärke *, +, ? või {}, muudab ? sunnib antud märke kaasama vasteks minimaalse võimaliku arvu sümboleid. Vaikimisi üritatakse haarata tekstist võimalikult suur arv sümboleid. |
. | . (punkt) vastab suvalisele sümbolile, välja arvatud reavahetuse märkidele \n ja \r |
(z) | Sulud märgivad ära soovitud mustrile z vastava tekstiosa ning jätavad selle meelde. Kasulik on see näiteks mingi teadmata pikkusega teksti leidmiseks kindlast asukohast nagu HTML koodis linkide aadressid. /href="(.*?)"/g |
(?:z) | Sarnaselt tavalistele sulgudele, otsitakse mustrile z vastavaid tekstiosi, kuid tulemusi ei jäeta meelde. |
x(?=y) | Mustrit x arvestatakse ainult juhul, kui sellele järgneb muster y. /Jaan(?=Tamm)/ vastab tekstile „Jaan“ ainult juhul, kui sellele järgneb vahetult „Tamm“. Sulgudes olevat osa ei tagastata tulemusena. |
x(?!y) | Mustrit x arvestatakse ainult juhul, kui sellele ei järgne mustrit y. /Jaan(?!Tamm)/ vastab tekstile „Jaan“ ainult juhul, kui sellele ei järgne vahetult stringi „Tamm“. |
x|y | Vastab kas mustrile x või y |
{n} | Vastab täpselt n (positiivne täisarv) kordust eelnenud märgendi kohta. /a{5}/ vastab stringile „aaaaa“ |
{n,} | Vastab vähemalt n (positiivne täisarv) kordust eelnenud märgendi kohta. /a{,5}/ vastab stringile „aaaaaaaa“ (rohkem kui 5 kordust) |
{n,m} | Vastab vähemalt n, kuid mitte rohkem kui m (positiivsed täisarvud) kordust eelnenud märgendi kohta. /a{5,7}/ vastab stringile „aaaaaa“ |
[abc] | Tähevalik, otsing peab vastama vähemalt ühele nimekirjas olevale sümbolile. Sümbolijadade kaasamiseks võib kasutada miinusmärki ([0-9] on sama mis [0123456789]) |
[^abc] | Negatiivne tähevalik, otsing ei tohi vastata ühelegi nimekirjas olevale sümbolile. Sümbolijadade kaasamiseks võib kasutada miinusmärki ([^0-9] on sama mis [^0123456789]) |
[\b] | Tähistab tagasilükke sümbolit |
\b | Tähistab sõna serva. /\bk/ vastab tähele k stringis katus |
\B | Tähistab serva puudumist. /\bt/ vastab tähele t stringis katus |
\cX | X tähistab tähevahemikku A-Z. Tegun on kontrollsümboliga, \cA tähistab Ctrl+A sümbolit tekstis. |
\d | Tähistab numbrit vahemikus 0-9 |
\D | Tähistab sümboleid, mis pole numbrid, sama mis [^0-9] |
\n | Tähistab reavahetuse sümbolit \n |
\r | Tähistab tagastussümbolit \r |
\s | Tähistab tühemiku sümbolit - tühik, reavahetus jms |
\S | Tähistab sümbolit, mis ei esita tühemikku |
\t | Tähistab tabulatsioonisümbolit \t |
\w | Tähistab suvalist tähelis-numbrilist sümbolit, kaasa arvatud alakriipsu ([a-zA-Z0-9_]) |
\W | Tähistab suvalist sümbolit, mis pole täheline-numbriline, sh. alakriips ([^a-zA-Z0-9_]) |
\z | z on positiivne täisnumber. Erisümbol tähistab z kordset tagasiviidet eelnevalt sulgudega määratud (vasakult lugedes) sisu juurde |
\0 | Tähistab erisümbolit NUL |
\xHH | Tähistab kuueteistkümnendsüsteemis määratud koodiga sümbolit. |
\xHHHH | Tähistab kuueteistkümnendsüsteemis määratud kahekordse koodiga Unikood sümbolit. |
Tabel 4. Erisümbolid regulaaravaldistes
Regulaaravaldised on üldiselt üsnagi võimekad ning siinsest ruumist ei piisa nende täielikuks lahtikirjutamiseks. Täpsemat infot tasub otsida regulaaravaldistele keskendunud raamatutest. Kuna JavaScripti regulaaravaldised on modelleeritud programmeerimiskeele PERL vastava väga levinud süntaksi alusel, ei tohiks materjali leidmisega probleeme tekkida.
Käidud rada: • nimeruumid • operaatorid • matemaatika • sissejuhatus • funktsioonid • andmetueuebid • xmlhttprequest • aeg_ja_kuupaev • bitioperatsioonid • regulaaravaldised