Deo zbornika Učimo Javascript

Regularni izraz

regex

Regularni izraz (regular expression, skraćeno regex) je jezik za opisivanje obrazaca. Koristi se za naprednu pretragu teksta. Podržan je unutar mnogih programskih jezika. Prilično je nečitak, ali veoma koristan u radu sa znakovnim podacima.

Primena regularnih izraza može varirati od jezika do jezika. U Javascriptu, regularni izrazi proširuju mogućnosti manipulacije tekstom, pomoću metoda kao što su search(), match() i replace().

Modifikatori

U Javaskriptu regularni izraz ima dva dela: sam izraz (oivičen kosim crtama) i opcione modifikatore:

/izraz/modifikatori

Modifikatori mogu biti:

  • i (insensitive) - neosetljivost na mala i velika slova
  • g (global) - sva podudaranja (inače samo prvo)
  • m (multiline) - pretraga u više redova teksta

U programu za pronalaženje psovki, to bi izgledalo ovako:

const izjava = "Ti si govno!"
const izraz = /govno/i

if (izraz.test(izjava))
  console.log("Izjava sadrži uvredljiv izraz.")
else
  console.log("Izjava ne sadrži uvredljiv izraz.")

Početak i kraj (^, $)

Ako stavimo kapicu (^) ispred izraza koji tražimo, onda taj izraz mora biti na samom početku teksta.

const izjava = "Ti si moj prijatelj!"
const izraz = /^prijatelj/

if (izraz.test(izjava))
  console.log("Izjava počinje traženim izrazom.")
else
  console.log("Izjava ne počinje traženim izrazom.")

Ukoliko stavimo znak dolara ($) iza izraza koji tražimo, onda taj izraz mora biti na samom kraju teksta.

Grupisanje ([])

Kada grupišemo više znakova u uglaste zagrade, regex traži alternativno bilo koji od njih:

[abc]    traži bilo koje slovo a, b ili c
[123]    traži bilo koji broj 1, 2 ili 3
[NG]eo   traži Neo ili Geo

Na primer:

const struna = "Moje ime je Neo."
const izraz = /[NG]eo/

const ne = izraz.test(struna) ? "" : "ne "
console.log(`Obrazac se ${ne}nalazi u struni.`)

Negacija ([^])

Kapica (^) unutar uglastih zagrada ima značenje negacije:

[^abc]   traži bilo koji znak a da nije a, b, c
[^123]   traži bilo koji znak a da nije 1, 2, 3

Na primer:

const struna = "11231"
const izraz = /[^123]/

const ne = izraz.test(struna) ? "" : "ne "
console.log(`Obrazac se ${ne}nalazi u struni.`)

Raspon ([-])

Crta (-) unutar uglastih zagrada označava raspon:

[a-z]    traži sva mala slova od a do z
[A-Z]    traži sva velika slova od A do Z
[a-Z]    traži sva slova
[0-9]    traži sve brojeve od 0 do 9
[^5-9]   traži sve brojeve koji nisu u rasponu od 5 do 9

Na primer:

const struna = "ZDRAVO SVETE 32354646"
const izraz = /[a-z]/

const ne = izraz.test(struna) ? "" : "ne "
console.log(`Obrazac se ${ne}nalazi u struni.`)

Napomena: crtica izvan uglastih zagrada je samo crtica.

Broj pojavljivanja (?, +, *, {})

Znak pitanja (?) znači da se prethodni znak javlja opciono (0 ili jedanput).

rj?ečnik traži rečnik i rječnik

Na primer:

const struna = "Vukov rečnik srpskog jezika"
const izraz = /rj?ečnik/

const ne = izraz.test(struna) ? "" : "ne "
console.log(`Obrazac se ${ne}nalazi u struni.`)

Slično, zvezdica (*) znači da se prethodni znak javlja opciono, 0 ili više puta.

Plus (+) znači da se prethodni znak javlja obavezno, 1 ili više puta zaredom.

Broj n unutar vitičastih zagrada {} znači da se prethodni obrazac javlja n puta:

[0-9]{4} traži bilo koji četvorocifreni broj

Kvantifikator {n1,n2} znači da se prethodni obrazac javlja najmanje n1 puta, ali ne više od n2 puta:

[0-9]{3, 6} traži sve brojeve između trocifrenih i šestocifrenih

Kvantifikator {n,} znači da se prethodni znak javlja najmanje n puta.

Posebni karakteri (\d, \D, \w, \W, \s, \S)

Posebni znaci odnosno metakarakteri su znaci sa specijalnim značenjem.

.       bilo koji znak
\w      slovo
\W      ne-slovo
\d      broj
\D      ne-broj
\s      praznina
\S      ne-praznina
\n      nova linija
\t      tab

Podizrazi (())

Obične zagrade () mogu služiti da grupišemo delove izraza, što se naziva podizraz.

(Dobar)( )(dan)    traži Dobar dan
(\w+)\W+(\w+)      traži slova prazninu slova

Primer:

const struna = "Petar Petrović"
const izraz = /(\w+)\W+(\w+)/

const ne = izraz.test(struna) ? "" : "ne "
console.log(`Obrazac se ${ne}nalazi u struni.`)

Alternativa (|)

Vertikalna crta ili cev (|) označava alternativu.

(W|L)in   nalazi Win u Windows
          nalazi Lin in Linux

JS metode za regularni izraz

Metoda Opis
exec RegExp metoda. Traži obrazac u struni. Vraća niz informacija.
test RegExp metoda. Traži obrazac u struni. Vraća true ili false.
match String metoda. Traži obrazac u struni. Vraća niz informacija ili null.
search String metoda. Traži obrazac u struni. Vraća index obrasca ili -1.
replace String metoda. Traži obrazac u struni, i zamenjuje obrazac prosleđenim.
split String metoda. Koristi regularni izraz ili strunu da razbije strunu u niz.