⊗jsSpRELAB 133 of 294 menu

Pozitivni i negativni pregled (lookahead i lookbehind) u JavaScript regularnim izrazima

Ponekad je potrebno rešiti problem ovog tipa: naći string 'aaa' i zameniti ga sa '!', ali samo ako se posle 'aaa' nalazi 'x', a sam 'x' pritom ne zameniti. Ako pokušamo da rešimo problem 'direktno', nećemo uspeti:

'aaax baaa'.replace(/aaax/g, '!'); // vratiće '! baaa', a hteli smo '!x baaa'

Pregled unapred (lookahead)

Za rešavanje ovog problema potreban je način da se kaže da 'x' ne treba zameniti. To se radi pomoću specijalnih zagrada (?= ), koje samo proveravaju (gledaju), ali ne uzimaju deo stringa.

Ove zagrade se zovu pozitivan pregled unapred (positive lookahead). Pozitivan - jer 'x' (u našem slučaju) mora da postoji - samo tada će doći do zamene.

Hajde da primenimo ove zagrade da rešimo naš problem:

'aaax aaab'.replace(/aaa(?=x)/g, '!'); // vratiće '!x aaab'

Postoji i negativan pregled unapred (negative lookahead) - (?! ) - on, suprotno, govori da nečega ne sme biti. U sledećem primeru, zamena će se desiti, samo ako se posle 'aaa' ne nalazi 'x':

'aaax aaab'.replace(/aaa(?!x)/g, '!'); // vratiće 'aaax !b'

Pregled unazad (lookbehind)

Analogno, postoji pozitivan pregled unazad (positive lookbehind) - (?<= ). U sledećem primeru zamena će se desiti, samo ako se ispred 'aaa' nalazi 'x':

'xaaa'.replace(/(?<=x)aaa/g, '!'); // vratiće 'x!'

Postoji i negativan pregled unazad (negative lookbehind) - (?<! ). U sledećem primeru zamena će se desiti, samo ako se ispred 'aaa' ne nalazi 'x':

'baaa'.replace(/(?<!x)aaa/g, '!'); // vratiće 'b!'

Praktični zadaci

Dat je string koji sadrži imena funkcija:

let str = 'func1() func2() func3()';

Dobijte niz imena funkcija iz stringa.

Dat je string sa HTML tagom:

let str = '<a href="" class="eee" id="zzz">';

Dobijte niz imena atributa ovog taga.

Dat je string sa promenljivima:

let str = '$aaa $bbb $ccc xxxx';

Dobijte podstringove ispred kojih se nalazi znak dolara.

Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij