Oznake za početak i kraj u regularnim izrazima
Regularne izraze često koristimo da bismo proverili da li tekst počinje ili se završava na određen način. Za to nam je potrebno da nekako označimo početak i kraj. Ove oznake nisu zaista konkretni znakovi, već graničnici koji označavaju početak i kraj.
^XYZ | Traži tekst XYZ koji se nalazi isključivo na početku teksta ili linije |
XYZ$ | Traži tekst XYZ koji se nalazi isključivo na kraju teksta ili linije |
\b | Ovo je poseban džoker znak kojim se obeležava početak odnosno kraj reči. |
\B | Negacija \b znaka, dakle graničnik za svaki znak koji nije na početku odnosno kraju reči. |
Oznaku za početak teksta ima smisla navoditi na samom početku regularnog izraza. To bukvalno znači da ćemo imati poklapanje ako "tekst počinje tim-i-tim šablonom". Isto važi i za graničnik za kraj teksta - njega smeštamo na kraj izraza.
^[šablon]
[šablon]$
Početak teksta | ^sva | g | svaki kraj će tako osvanuti kao novi početak | Ovaj šablon selektuje tekst "sva", ali samo onaj koji se nalazi na početku, zahvaljujući kvačici ^,
koju smo postavili na početak regularnog izraza.
Probajte da uklonite oznaku za početak, da vidite šta se dešava - biće selektovan i "sva" iz "osvanuti". |
Kraj teksta | tak$ | g | svaki kraj će tako osvanuti kao novi početak | U ovom primeru biće selektovan tekst "tak", ali samo na kraju teksta.
Šablon je vezan za kraj, zahvaljujući znaku za dolar $.
Ako biste uklonili ovu oznaku iz šablona, biće selektovane sve pojave teksta "tak" (i iz "tako"). |
Tekst koji se sastoji od 3 cifre | ^\d\d\d$ | g | 452 | Ovde u šablonu koristimo oznaku za početak i kraj - to znači da smo definisali šablon ne kao deo teksta već kao kompletan tekst. Naveli smo i metaznak d, koji označava bilo koju cifru, tri puta, što bi značilo da proveravamo da li se ceo tekst sastoji isključivo iz tri cifre. |
Cifre od početka do kraja | ^\d+$ | g | 124578 | Slično kao u prethodnom primeru, definišemo šablon koji uparuje tekst koji se sastoji samo od jedne ili više cifara. |
U sledećem primeru definišemo iste šablone samo u JavaScriptu.
Primer
var prom = "svaki kraj će tako osvanuti kao novi početak";
// testiranje za početak
var p1 = /sva/g;
var p2 = /^sva/g;
// testiranje za kraj
var k1 = /tak/g;
var k2 = /tak$/g;
Prvi regularni izraz pronalazi sve pojave stringa "sva". Drugi pronalazi samo onaj koji se nalazi na početku teksta:
- svaki kraj će tako osvanuti kao novi početak
- svaki kraj će tako osvanuti kao novi početak
Isto važi kada testiramo pojavu stringa "tak" bez oznake i sa oznakom koja kaže da se javlja na kraju teksta:
- svaki kraj će tako osvanuti kao novi početak
- svaki kraj će tako osvanuti kao novi početak
Evo jednog korisnog primera - želimo da proverimo da li se tekst sastoji samo od cifara:
var r1 = /^\d\d\d$/; // početak, pa tri cifre, pa kraj
var r2 = /^\d+$/; // početak, pa jedna ili više cifara, pa kraj
Uparivanje kroz više linija
Ako zadamo modifikator m, oznake za početak i kraj će se drugačije ponašati. Više neće označavati samo početak i kraj celog teksta, već i svake linije u tekstu.
Multiline primer
var prom = "Otišao sam do kraja sveta\nsaznao sam da na tom mestu\npočinje neki drugi svet!";
var p1 = /^.../g; // prva tri znaka teksta
var p2 = /^.../gm; // prva tri znaka svake linije
// testiranje za kraj
var k1 = /...$/g; // poslednja tri znaka teksta
var k2 = /...$/gm; // poslednja tri znaka svake linije
Prvi regularni izraz pronalazi prva tri znaka teksta, a drugi prva tri znaka svake linije:
- Otišao sam do kraja sveta
saznao sam da na tom mestu
počinje neki drugi svet! - Otišao sam do kraja sveta
saznao sam da na tom mestu
počinje neki drugi svet!
Slična situacija je i kada radimo sa oznakom za kraj.
- Otišao sam do kraja sveta
saznao sam da na tom mestu
počinje neki drugi svet! - Otišao sam do kraja sveta
saznao sam da na tom mestu
počinje neki drugi svet!
- RegEx Tutorial Anchors
- A. Watt (2005): Beginning Regular Expressions, Wiley Publishing, Indianapolis
- J. Goyvaerts, S. Levithan (2012): Regular Expressions Cookbook, 2nd Ed, O’Reilly, Sebastopol