Načrtovanje in razvoj spletnih aplikacij

JavaScript Regular Expression

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() in replaceAll() delujejo z nizi in regularnimi izrazi.
  • Metodi test() in exec() delujeta neposredno na objektu RegExp.
  • 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/i celoten regularni izraz,
  • eNSA vzorec, ki ga iščemo,
  • i zastavica, 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 zastavico g.
  • 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 g ni uporabljena, čeprav je namen zamenjati ali poiskati vsa ujemanja.
  • Metoda replaceAll() se uporabi z regularnim izrazom brez zastavice g.
  • Metoda search() se uporablja tam, kjer bi bila zaradi preglednosti primernejša metoda test() ali match().
  • Pri delu z besedili, ki vsebujejo širši nabor znakov, se uporabljajo preveč poenostavljeni vzorci brez Unicode podpore.