⊗jsSpRELAB 133 of 294 menu

Pozitívny a negatívny prehľad v regulárnych výrazoch JavaScript

Niekedy je potrebné vyriešiť úlohu tohto typu: nájsť reťazec 'aaa' a nahradiť ho '!', ale len ak za 'aaa' nasleduje 'x', pričom samotné 'x' sa nenahrádza. Ak sa pokúsime úlohu vyriešiť 'priamo', nič sa nám nepodarí:

'aaax baaa'.replace(/aaax/g, '!'); // vráti '! baaa', ale chceli sme '!x baaa'

Prehľad dopredu

Na vyriešenie úlohy potrebujeme spôsob, ako povedať, že 'x' by sa nemalo nahradiť. To sa vykonáva pomocou špeciálnych zátvoriek (?= ), ktoré len prehliadajú, ale neberú so sebou.

Tieto zátvorky sa nazývajú pozitívny prehľad dopredu. Pozitívny - pretože 'x' (v našom prípade) musí byť prítomný - až vtedy prebehne nahradenie.

Aplikujme tieto zátvorky na vyriešenie našej úlohy:

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

Existuje aj negatívny prehľad dopredu - (?! ) - ten naopak hovorí, že niečo by nemalo byť prítomné. V nasledujúcom príklade k nahradeniu dôjde len vtedy, ak za 'aaa' nenasleduje 'x':

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

Prehľad dozadu

Analogicky existuje pozitívny prehľad dozadu - (?<= ). V nasledujúcom príklade k nahradeniu dôjde len vtedy, ak pred 'aaa' je 'x':

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

A tiež existuje negatívny prehľad dozadu - (?<! ). V nasledujúcom príklade k nahradeniu dôjde len vtedy, ak pred 'aaa' nie je 'x':

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

Praktické úlohy

Daný je reťazec obsahujúci názvy funkcií:

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

Získajte pole názvov funkcií z reťazca.

Daný je reťazec s tagom:

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

Získajte pole názvov atribútov tohto tagu.

Daný je reťazec s premennými:

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

Získajte podreťazce, pred ktorými je znak dolára.

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
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť