⊗jsSpREGL 101 of 294 menu

Beperking van gulzigheid in regex in JavaScript

Reguliere expressies zijn standaard gulzig. Dit betekent dat ze het maximaal mogelijke aantal tekens vastleggen. Laten we dit uitleggen met een voorbeeld. Stel dat we de volgende string hebben:

let str = 'aeeex zzz x kkk';

Stel dat we in deze string de substring 'aeeex' willen vinden volgens het volgende patroon: letter 'a', dan elk teken een of meer keer, dan letter 'x'.

let res = str.replace(/a.+x/g, '!');

We verwachten dat het resultaat in de variabele de string '! zzz x kkk' zal zijn. Echter, dit is niet het geval - de variabele bevat de string '! kkk'.

De reden is dat onze regex alle tekens zoekt van de letter 'a' tot de letter 'x'. Maar in onze string staan twee letters 'x'! Door de gulzigheid zoekt de regex tot de allerlaatste 'x', waardoor hij iets vastlegt dat we niet verwachtten.

Natuurlijk is dit gedrag vaak precies wat we nodig hebben. Maar in dit specifieke geval zouden we de gulzigheid willen uitschakelen en de regex zeggen dat hij moet zoeken tot de eerste 'x'.

Om gulzigheid te beperken, moet je na de herhalingsoperator een vraagteken plaatsen:

let res = str.replace(/a.+?x/g, '!');

Gulzigheid kan worden beperkt voor alle herhalingsoperatoren: zowel *, als ?, als {} - zoals volgt: *?, ?? en {}?.

Gegeven de volgende string:

let str = 'aba accca azzza wwwwa';

Schrijf een regex die alle strings vindt waar aan de randen de letters 'a' staan, en vervang elk ervan door '!'. Tussen de letters 'a' kan elk teken staan (behalve 'a').

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