Regularni izraz je zaporedje znakov, ki določa iskalni vzorec. V JavaScriptu ga uporabljamo za iskanje, preverjanje, izločanje in zamenjavo delov besedila. Regularni izrazi so posebej uporabni pri preverjanju vnosov, iskanju vzorcev v nizih in obdelavi večjih količin besedila.
Pomni: Regularni izraz v JavaScriptu lahko zapišemo kot literal, na primer /vzorec/zastavice, ali pa ga ustvarimo s konstruktorjem new RegExp(). Literal je primeren za vnaprej znane vzorce, konstruktor pa za vzorce, ki jih sestavimo med izvajanjem programa.
Osnovna pravila
- Regularni izraz določa vzorec, ki ga želimo poiskati ali zamenjati.
- Zastavice določajo način iskanja, na primer neobčutljivost na velike in male črke ali globalno iskanje.
- Metode
search(),match(),replace()inreplaceAll()delujejo z nizi in regularnimi izrazi. - Metodi
test()inexec()delujeta neposredno na objektuRegExp. - Pri preprostem iskanju navadnega besedila je pogosto dovolj navaden niz, pri zahtevnejšem iskanju pa uporabimo regularni izraz.
Primerjave
Sintaksa
Regularni izraz zapišemo tako:
/vzorec/zastavice
Primer regularnega izraza:
const iskanje = /eNSA/i;
Pri tem je:
/eNSA/iceloten regularni izraz,eNSAvzorec, ki ga iščemo,izastavica, ki določa neobčutljivost na velike in male črke.
Uporaba z metodami niza
V JavaScriptu regularne izraze pogosto uporabljamo z metodami search(), replace(), replaceAll(), match() in matchAll(). Te metode vrnejo različne vrste rezultatov, zato jih uporabljamo glede na namen naloge.
| Metoda | Opis |
|---|---|
search() |
Vrne položaj prvega ujemanja ali -1. |
replace() |
Vrne nov niz, v katerem zamenja prvo ali več ujemanj, odvisno od vzorca. |
replaceAll() |
Vrne nov niz, v katerem zamenja vsa ujemanja. |
match() |
Vrne ujemanja v obliki tabele ali null. |
matchAll() |
Vrne iterator vseh ujemanj skupaj z dodatnimi podatki. |
Uporaba metode search() z regularnim izrazom
Metoda search() vrne položaj prvega ujemanja. Če uporabimo regularni izraz z zastavico i, iskanje ni občutljivo na velike in male črke.
const niz = "Obišči ENSA";
const n = niz.search(/eNSA/i); // vrne 7
const m = niz.search(/ENSA/i); // vrne 7
Uporaba metode search() z nizom
Če namesto regularnega izraza uporabimo navaden niz, se iskanje izvede brez dodatnih pravil regularnih izrazov in brez zastavic.
const niz = "Obišči ENSA";
const n = niz.search("eNSA"); // vrne -1
const m = niz.search("ENSA"); // vrne 7
Uporaba metode replace() z regularnim izrazom
Metoda replace() vrne nov niz. Če uporabimo regularni izraz z zastavico i, je zamenjava neobčutljiva na velike in male črke. Če uporabimo še zastavico g, lahko zamenjamo vsa ujemanja.
const niz = "Obišči eNSA!";
const n = niz.replace(/eNSA/i, "e-Načrtovanje in razvoj spletnih aplikacij");
const m = niz.replace(/ensa/i, "e-Načrtovanje in razvoj spletnih aplikacij");
Uporaba metode replaceAll()
Metoda replaceAll() zamenja vsa ujemanja. Če kot vzorec uporabimo regularni izraz, mora imeti ta zastavico g.
const niz = "ENSA in ENSA";
const novNiz = niz.replaceAll(/ENSA/g, "program");
Uporaba metode match()
Metoda match() vrne ujemanja. Pri globalnem iskanju pogosto dobimo tabelo vseh najdenih nizov.
const niz = "1 12 123";
const zadetki = niz.match(/\d+/g);
Uporaba z metodami RegExp
Regularni izraz lahko uporabimo tudi neposredno z metodama test() in exec(). Metoda test() vrne true ali false, metoda exec() pa vrne podrobnejše podatke o ujemanju ali null.
| Metoda | Opis |
|---|---|
test() |
Preveri, ali se vzorec ujema z nizom, in vrne logično vrednost. |
exec() |
Vrne podatke o prvem ujemanju ali null. |
const vzorec = /ENSA/i;
vzorec.test("Obišči ensa"); // true
const vzorec = /\d+/;
const rezultat = vzorec.exec("Soba 205");
Zastavice regularnih izrazov
Zastavice določajo način iskanja oziroma ujemanja. Z njimi lahko na primer določimo, da iskanje ne razlikuje med velikimi in malimi črkami, da se poiščejo vsa ujemanja, da se besedilo obravnava večvrstično ali da se pravilneje obravnavajo Unicode znaki. JavaScript pozna več zastavic, med njimi:
| Zastavica | Opis |
|---|---|
d |
Določa, da se pri ujemanju zabeležijo tudi indeksi najdenih delov niza. |
g |
Določa globalno iskanje, torej iskanje vseh ujemanj in ne le prvega. |
i |
Določa neobčutljivost na velike in male črke. |
m |
Določa večvrstično obravnavo začetka in konca vrstice. |
s |
Določa, da pika . ujame tudi znak nove vrstice. |
u |
Omogoča pravilnejšo obravnavo Unicode znakov. |
v |
Omogoča razširjen način dela z Unicode nabori znakov in lastnostmi znakov. |
y |
Določa lepljivo iskanje od trenutnega položaja v nizu. |
Vzorci in metaznaki
Regularni izrazi uporabljajo razrede znakov, metaznake, trditve in količnike. Ti elementi določajo, kaj in koliko znakov želimo poiskati.
Razredi znakov
| Vzorec | Opis |
|---|---|
[abc] |
Najde en znak izmed navedenih znakov. |
[0-9] |
Najde eno števko. |
(x|y) |
Najde x ali y. |
Metaznaki
| Metaznak | Opis |
|---|---|
\d |
Najde števko. |
\s |
Najde znak presledka. |
\b |
Najde mejo besede. |
\p{...} |
Omogoča Unicode lastnosti znakov pri uporabi Unicode zastavic. |
Unicode lastnosti, zapisane z \p{...} in \P{...}, so posebej uporabne pri delu z nelatiničnimi pisavami in širšim naborom znakov.
Količniki
| Količnik | Opis |
|---|---|
n+ |
Najde niz, ki vsebuje vsaj eno pojavitev n. |
n* |
Najde niz, ki vsebuje nič ali več pojavitev n. |
n? |
Najde niz, ki vsebuje nič ali eno pojavitev n. |
Regularni izraz ali navaden niz
Če želimo poiskati točno določeno besedilo brez posebnih pravil, je pogosto dovolj navaden niz. Če pa želimo upoštevati razrede znakov, ponovitve, alternative, meje besed ali zastavice, uporabimo regularni izraz.
Pomni: Pri preprostem iskanju točno določenega niza je navaden niz pogosto preglednejši. Regularni izraz uporabimo takrat, ko potrebujemo vzorec, ne le točno določen zapis.
Pozor: Metoda replace() z navadnim nizom praviloma zamenja le prvo pojavitev. Za zamenjavo vseh pojavitev uporabimo regularni izraz z zastavico g ali metodo replaceAll().
Priporočila
- Za preprosto iskanje točno določenega besedila pogosto uporabi navaden niz.
- Regularni izraz uporabi takrat, ko želiš iskati po vzorcu in ne le po enem nespremenljivem besedilu.
- Pri preverjanju, ali se ujemanje sploh zgodi, pogosto uporabi metodo
test(). - Za zamenjavo vseh pojavitev uporabi
replaceAll()ali regularni izraz z zastavicog. - Pri delu z Unicode besedilom razmisli o uporabi Unicode podpore in Unicode lastnosti znakov.
Pogoste napake
- Regularni izraz in navaden niz se obravnavata kot enakovredna načina iskanja, čeprav regularni izraz omogoča bistveno širše vzorce.
- Zastavica
gni uporabljena, čeprav je namen zamenjati ali poiskati vsa ujemanja. - Metoda
replaceAll()se uporabi z regularnim izrazom brez zastaviceg. - Metoda
search()se uporablja tam, kjer bi bila zaradi preglednosti primernejša metodatest()alimatch(). - Pri delu z besedili, ki vsebujejo širši nabor znakov, se uporabljajo preveč poenostavljeni vzorci brez Unicode podpore.