⊗jsSpRELAB 133 of 294 menu

Positieve en negatieve lookahead in JavaScript reguliere expressies

Soms moet je een probleem van dit type oplossen: vind de string 'aaa' en vervang deze door '!', maar alleen als na 'aaa' 'x' staat, en de 'x' zelf niet vervangen. Als we het probleem proberen op te lossen 'op de directe manier', zal het ons niet lukken:

'aaax baaa'.replace(/aaax/g, '!'); // retourneert '! baaa', maar we wilden '!x baaa'

Lookahead

Om het probleem op te lossen, is een manier nodig om te zeggen dat 'x' niet vervangen moet worden. Dit wordt gedaan met behulp van speciale haakjes (?= ), die alleen kijken, maar niet zelf meenemen.

Deze haakjes worden positieve lookahead genoemd. Positief - omdat 'x' (in ons geval) aanwezig moet zijn - alleen dan vindt vervanging plaats.

Laten we deze haakjes toepassen om ons probleem op te lossen:

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

Er is ook negatieve lookahead - (?! ) - deze zegt juist dat iets niet aanwezig moet zijn. In het volgende voorbeeld vindt vervanging alleen plaats als na 'aaa' GEEN 'x' staat:

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

Lookbehind

Op een vergelijkbare manier is er positieve lookbehind - (?<= ). In het volgende voorbeeld vindt vervanging alleen plaats als vóór 'aaa' een 'x' staat:

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

En er is ook negatieve lookbehind - (?<! ). In het volgende voorbeeld vindt vervanging alleen plaats als vóór 'aaa' geen 'x' staat:

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

Praktische opdrachten

Gegeven een string die functienamen bevat:

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

Verkrijg een array met functienamen uit de string.

Gegeven een string met een tag:

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

Verkrijg een array met de namen van de attributen van deze tag.

Gegeven een string met variabelen:

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

Verkrijg de substrings waarvoor een dollarteken staat.

Nederlands
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wij gebruiken cookies voor de werking van de site, analyse en personalisatie. De verwerking van gegevens gebeurt volgens het Privacybeleid.
alles accepteren aanpassen weigeren