Zamena unutar JavaScript stringa
Objekat string omogućava zamenu teksta unutar stringa drugim tekstom. Metod koji koristimo je replace() i pomoću njega možemo zadavati običan podstring ili regularni izraz za tekst koji treba zameniti.
s.replace(S, R) | Menja pronađeni podstring S novim tekstom R |
str.replace(podstring, novi_tekst)
str.replace(regEx, novi_tekst)
Ako zadajemo string kao prvi parametar, zamena se obavlja samo nad prvim pronađenim podstringom koji je jednak zadatom stringu. Ako bismo želeli da se zamena obavi nad svim pojavama zadatog stringa, moramo da upotrebimo regularni izraz sa modifikatorom g.
Očigledna mana koja se nameće je što različite tekstove koje pronalazimo preko zadatih regularnih izraza uvek menjamo jednim te istim tekstom. Šta ako želimo da se zamenski tekst odnosi baš na podstring koji smo pronašli? Zamenski string može sadržati i specijalne oznake koje se odnose na pronađene podstringove.
$& | Pronađeni podstring. |
$` | Deo originalnog stringa pre pronađenog podstringa. |
$' | Deo originalnog stringa posle pronađenog podstringa. |
$$ | Običan znak za dolar. |
Kao drugi parametar, umesto običnog teksta možemo proslediti funkciju. Ovo je callback funkcija koja se poziva za svaki pronađeni podstring. Njena povratna vrednost je string koji se ubacuje na mesto pronađenog podstringa. Parametri koji se zadaju funkciji omogućavaju potpunu kontrolu nad kreiranjem zamenskog stringa.
str.replace(podstring, funkcija)
str.replace(regEx, funkcija)
Parametri funkcije su:
ps | Pronađeni podstring. |
p1, p2, ... | Podstringovi koji odgovaraju delovima regularnog izraza u zagradama. |
poz | Pozicija na kojoj se nalazi pronađeni podstring. |
str | Originalni string u kome se vrši pretraga. |
Korišćenje regularnog izraza i zamenske funkcije je najmoćnija kombinacija metoda replace().
Primer za zamene
var prom = "Svaki vodeničar vodi evidenciju samlevenog žita.";
var a = "";
// menjamo podstring "vod" sa boldovanim "lub"
a = prom.replace("vod", "<b>lub</b>"); // zamenjena samo prva pojava
// menjamo šablon "v.d" sa boldovanim "lub"
a = prom.replace(/v.d/, "<b>lub</b>"); // zamenjena samo prva pojava
// menjamo šablon "v.d" sa boldovanim "lub", ali svuda gde ga ima
a = prom.replace(/v.d/g, "<b>lub</b>"); // zamenjene sve pojave
// šablon ostaje isti ali zamenski string menjamo tako da
// svaki pronađeni podstring podebljamo, bez promene teksta
a = prom.replace(/v.d/g, "<b>$&</b>"); // boldovane sve pojave
// koristimo funkciju umesto zamenskog stringa - svaki pronađeni podstring markiramo
a = prom.replace(/v.d/g, function(ps) {
return '<mark>' + ps + '</mark>'; // markiranje
});