Pronalaženje tekstualnih šablona u JavaScriptu
Videli smo da u JavaScript-u na relativno lak način možemo da pronalazimo podstringove unutar stringa. Međutim, priča se tu ne završava. String objekat nam nudi još naprednije metode za uparivanje stringova i to na osnovu šablona koje zadajemo kao regularne izraze. Ovi metodi su search() i match().
s.search(R) | Prva pozicija substringa koji se uklapa u regularni izraz R. |
s.match(R) | Pronalazi jedan ili više pod-stringova za zadati regularni izraz R. |
Metod search()
Metod search() se poziva za string objekat, sa zadatim parametrom koji može biti string ili šablon. Ako se zadati podstring (šablon) može pronaći unutar stringa, kao rezultat dobijamo poziciju prve pojave podstringa/šablona unutar stringa. Ako se ne može pronaći, rezultat je -1.
Ovaj metod suštinski funkcioniše kao i indexOf(), s tim što funkcioniše i za regularne izraze.
Objekat regularnog izraza takođe ima sličan metod - test().
str.search(regEx)
str.search(subStr)
Parametar | Tip | Obavezan | Opis |
---|---|---|---|
šablon | regExp string | DA | Tekst ili šablon koji se traži unutar string objekta. |
Rezultat | Opis |
---|---|
numerik | Redni broj znaka od koga počinje prvi pronađeni podstring. Ako nema podudaranja, rezultat je -1. |
Metod match()
Metod match() se zadaje isto kao search(), s tim što je parametar uvek regularni izraz. Moguće je zadati i string, ali će on biti konvertovan u šablon.
Međutim tu prestaje svaka sličnost - metod match() je malo kompleksniji u odnosu na search(). Ako je šablon pronađen, kao rezultat vraća niz. U suprotnom vraća vrednost null.
Niz koji se vraća zavisi od modifikatora "g" u regularnom izrazu.
- ako se zada modifikator "g" - vraća se niz stringova podudaranja koja su pronađena
- ako se ne zada modifikator "g" - vraća se niz koji ima samo jedan element - string koji predstavlja prvo podudaranje.
Ovaj niz ima i dva specijalna svojstva:- index - pozicija pronađenog podudaranja (numerička vrednost)
- input - string u kome se vrši pretražvanje (string)
str.match(šablon)
Parametar | Tip | Obavezan | Opis |
---|---|---|---|
šablon | regExp string | DA | Tekst ili šablon koji se traži unutar string objekta. |
Rezultat | Opis |
---|---|
niz | Niz podstringova koji su se uklopili u zadati šablon. |
null | Ako nije pronađeno ni jedno podudaranje. |
Ovaj metod se može uporediti sa metodom exec() objekta regularnog izraza.
Primeri za pronalaženje šablona
Pogledajmo prvo primere za metod search().
var prom = "U bukvaru piše da mama ima Momu.";
x = prom.indexOf("Mom"); // x = 27
x = prom.search("Mom"); // x = 27
x = prom.search(/m.m/i); // x = 18
Vidimo da su metodi search() i indexOf() praktično isti kada se zada string. Međutim u drugom primeru vidimo da metod search() radi i sa regularnim izrazima.
Pogledajmo sada kako funkcioniše metod match().
var prom = "U bukvaru piše da mama ima Momu.";
x = prom.match(/m.m/gi); // x = ["mam", "Mom"] (niz koji sadrži pronađene substringove)
x = prom.match(/m.m/i); // x = ["mam"] (niz od 1 elementa koji sadrži pronađen substring)
// x.index = 18
// x.input = "U bukvaru piše da mama ima Momu."
U prvom primeru vidimo da se traži regularni izraz koji ima modifikator g. To znači da se traži svako poklapanje sa zadatim šablonom. U tom slučaju kao rezultat dobijamo niz podstringova koji su se poklopili.
Ako se traži samo jedno poklapanje (u drugom primeru), opet dobijamo niz, ali samo sa jednim elementom. Taj element predstavlja prvi "pogođeni" podstring, a ono što nas takođe zanima je index - dodatno svojstvo ovog niza koje sadrži poziciju na kojoj se podstring nalazi. Kao dodatak, tu je i svojstvo input koje sadrži original stringa u kome je vršena pretraga.