Shikimi Pozitiv dhe Negativ në Regex JavaScript
Ndonjëherë duhet të zgjidhet një detyrë e këtij lloji: gjeni
vargun 'aaa' dhe zëvendësojeni atë me '!',
por vetëm nëse pas 'aaa' ndodhet
'x', kurse vetë 'x'
mos e zëvendësoni. Nëse përpiqemi ta zgjidhim detyrën
'drejtpërdrejt', nuk do të dalë:
'aaax baaa'.replace(/aaax/g, '!'); // kthen '! baaa', por ne donim '!x baaa'
Shikim Përpara
Për të zgjidhur detyrën nevojitet një mënyrë për të thënë
se 'x' nuk duhet të zëvendësohet. Kjo bëhet
duke përdorur kllapat speciale (?= ),
të cilat thjesht shikojnë, por nuk e marrin me vete.
Këto kllapa quhen shikim pozitiv përpara. Pozitiv - sepse 'x'
(në rastin tonë) duhet të jetë - vetëm atëherë
do të ndodhë zëvendësimi.
Le t'i përdorim këto kllapa për të zgjidhur detyrën tonë:
'aaax aaab'.replace(/aaa(?=x)/g, '!'); // kthen '!x aaab'
Ekziston edhe shikim negativ përpara
- (?! ) - ai, përkundrazi, thotë se
diçka nuk duhet të jetë. Në shembullin vijues,
zëvendësimi do të ndodhë vetëm nëse pas 'aaa'
nuk ndodhet 'x':
'aaax aaab'.replace(/aaa(?!x)/g, '!'); // kthen 'aaax !b'
Shikim Prapa
Në mënyrë të ngjashme ekziston shikim pozitiv
prapa - (?<= ). Në shembullin vijues
zëvendësimi do të ndodhë vetëm nëse para
'aaa' ndodhet 'x':
'xaaa'.replace(/(?<=x)aaa/g, '!'); // kthen 'x!'
Ekziston gjithashtu shikim negativ prapa
- (?<! ). Në shembullin vijues zëvendësimi
do të ndodhë vetëm nëse para 'aaa'
nuk ndodhet 'x':
'baaa'.replace(/(?<!x)aaa/g, '!'); // kthen 'b!'
Detyra Praktike
Është dhënë një varg që përmban emra funksionesh:
let str = 'func1() func2() func3()';
Merrni një varg emrash funksionesh nga vargu.
Është dhënë një varg me një tag:
let str = '<a href="" class="eee" id="zzz">';
Merrni një varg emrash të atributeve të këtij tagu.
Është dhënë një varg me variabla:
let str = '$aaa $bbb $ccc xxxx';
Merrni nënvargjet, para të cilave ndodhet simboli i dollarit.