Regularni izrazi u JavaScript-u
JavaScript ima dobru podršku za regularne izraze. RegEx su takođe povezani sa string objektom, tako da ih je moguće koristiti za pretrage i zamene u stringovima.
Postoje dva moguća načina za definisanje regularnih izraza - putem literala i kreiranjem instance objekta. Ako želimo da definišemo regularni izraz kao literal, moramo da ga navedemo unutar kosih crta. Ako želimo da dodamo i modifikatore, navodimo ih neposredno posle kose crte za "zatvaranje".
/šablon/
/šablon/modifikatori
Drugi način je pozivanjem konstruktora objekta RegExp. U ovom slučaju regularni izraz se zadaje kao prvi string parametar (unutar navodnika), a drugi (opcioni) string parametar su modifikatori.
new RagExp(šablon)
new RagExp(šablon, modifikatori)
Prvi način - preko literala, je bolji po pitanju brzine. U tom slučaju se regularni izraz kreira čim se JavaScript program učita i šablon ostaje nepromenljiv.
Sa druge strane, drugi način - konstrukcijom objekta, bolji je po pitanju fleksibilnosti. U tom slučaju se regularni izraz kreira tokom izvršavanja programa. To znači da možemo da zadamo šablon koji se formira tokom izvršenja programa (npr. šablon ili pretragu koje korisnik unosi).
Primeri RegEx-a u JavaScript-u
Hajde da prvo vidimo kako bismo zadali jednostavan šablon koji traži dva slova "a" između kojih se nalazi bilo koji znak.
var t = "Ana je znala da je Aca namazao dva parčeta hleba.";
var r1 = /a.a/;
var r2 = new RegExp("a.a");
Ovde imamo dva načina za kreiranje šablona - prvi (r1) preko literala, a drugi (r2), preko konstruktorske funkcije iz zadatog stringa. Kako god ga napravili, regularni izraz će se ponašati isto. Ovaj šablon bi u tekstu pronašao sledeći podstring: "Ana je znala da je Aca namazao dva parčeta hleba.". Ono što bismo možda očekivali ("Ana") nije pronađeno, upravo zbog toga što regularni izrazi razlikuju velika i mala slova.
var t = "Ana je znala da je Aca namazao dva parčeta hleba.";
var r1 = /a.a/gi;
var r2 = new RegExp("a.a", "gi");
Ovaj šablon, koji uključuje i modifikatore, bi u tekstu pronašao sledeće podstringove: "Ana je znala da je Aca namazao dva parčeta hleba.". Zahvaljujući modifikatorima g i i, ovaj regularni izraz pronalazi sve pojave šablona u tekstu, ali takođe više ne razlikuje velika i mala slova. Modifikatorima ćemo se baviti u posebnoj temi, a ovde nas samo zanima kako se oni zadaju.
Zadavanje "preskakanja"
Za pojedine specijalne znakove u šablonu je potrebno zadati znak za "preskakanje" (escape), odnosno obrnutu kosu crtu (backslash).
var r1 = /\d\d/;
var r2 = new RegExp("\\d\\d");
Ovaj šablon treba da pronađe dve cifre u tekstu. Za to se koristi metaznak "d", koji postaje metaznak samo kada je "preskočen" obrnutom kosom crtom (bez nje bi to bilo obično slovo "d" u šablonu).
Kada se znak za preskakanje zada unutar literala, zadaje se obično. Međutim, ako se koristi konstruktor, ne smemo da zaboravimo da "preskočimo" znak za "preskakanje" (mora dupla obrnuta kosa crta). Ovo je neophodno, pošto je šablon pre svega string, a u njemu takođe postoje mogućnosti za "preskakanje", što znači da ako nam treba da kosa crta "probije" do regularnog izraza, moramo je "preskočiti".