⊗jsSpRELAB 133 of 294 menu

Positiv och negativ lookahead i JavaScript reguljära uttryck

Ibland behöver man lösa en uppgift av den här typen: hitta strängen 'aaa' och ersätt den med '!', men bara om efter 'aaa' står 'x', och själva 'x' ska inte ersättas. Om vi försöker lösa uppgiften 'rakt på', kommer det inte att lyckas:

'aaax baaa'.replace(/aaax/g, '!'); // returnerar '! baaa', men vi ville ha '!x baaa'

Lookahead

För att lösa uppgiften behövs ett sätt att säga, att 'x' inte ska ersättas. Detta görs med hjälp av speciella parenteser (?= ), som bara tittar, men inte tar med sig.

Dessa parenteser kallas positiv lookahead . Positiv - eftersom 'x' (i vårt fall) måste finnas - bara då kommer ersättningen att ske.

Låt oss använda dessa parenteser för att lösa vår uppgift:

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

Det finns också negativ lookahead - (?! ) - den säger, tvärtom, att något inte ska finnas. I följande exempel kommer ersättningen att ske, bara om efter 'aaa' inte står 'x':

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

Lookbehind

På ett liknande sätt finns det positiv lookbehind - (?<= ). I följande exempel kommer ersättningen att ske, bara om före 'aaa' står 'x':

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

Och det finns också negativ lookbehind - (?<! ). I följande exempel kommer ersättningen att ske, bara om före 'aaa' inte står 'x':

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

Praktiska uppgifter

Given är en sträng som innehåller funktionsnamn:

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

Få en array med funktionsnamn från strängen.

Given är en sträng med en tagg:

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

Få en array med attributnamn för denna tagg.

Given är en sträng med variabler:

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

Få delsträngarna, framför vilka dollartecknet står.

Svenska
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi använder kakor för webbplatsens funktion, analys och personalisering. Behandling av data sker i enlighet med Integritetspolicyn.
acceptera alla anpassa avvisa