⊗jsSpRELAB 133 of 294 menu

Pozitivno in negativno napovedovanje v regularnih izrazih JavaScript

Včasih je treba rešiti nalogo te vrste: najti niz 'aaa' in ga zamenjati z '!', vendar le, če je za 'aaa' 'x', samega 'x' pa ne zamenjati. Če poskušamo rešiti nalogo 'neposredno', nam ne bo uspelo:

'aaax baaa'.replace(/aaax/g, '!'); // vrne '! baaa', želeli pa smo '!x baaa'

Napovedovanje naprej

Za rešitev naloge potrebujemo način, da povemo, da 'x' ne smemo zamenjati. To naredimo s pomočjo posebnih oklepajev (?= ), ki samo gledajo, vendar ne zajamejo s seboj.

Ti oklepaji se imenujejo pozitivno napovedovanje naprej. Pozitivno - ker mora biti 'x' (v našem primeru) prisotno - šele takrat se bo zamenjava zgodila.

Uporabimo te oklepaje za rešitev naše naloge:

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

Obstaja tudi negativno napovedovanje naprej - (?! ) - ki, nasprotno, pravi, da nečesa ne sme biti. V naslednjem primeru se bo zamenjava zgodila le, če za 'aaa' ni 'x':

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

Napovedovanje nazaj

Podobno obstaja pozitivno napovedovanje nazaj - (?<= ). V naslednjem primeru se bo zamenjava zgodila le, če je pred 'aaa' 'x':

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

Obstaja pa tudi negativno napovedovanje nazaj - (?<! ). V naslednjem primeru se bo zamenjava zgodila le, če pred 'aaa' ni 'x':

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

Praktične naloge

Podan je niz, ki vsebuje imena funkcij:

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

Pridobite seznam imen funkcij iz niza.

Podan je niz z oznako:

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

Pridobite seznam imen atributov te oznake.

Podan je niz s spremenljivkami:

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

Pridobite podnize, pred katerimi je znak dolarja.

Slovenščina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni