⊗jsSpREGL 101 of 294 menu

Begrensning av grådighet i regulære uttrykk i JavaScript

Regulære uttrykk er som standard grådige. Dette betyr at de fanger maksimalt mulig antall tegn. La oss se på et eksempel. La oss si at vi har følgende streng:

let str = 'aeeex zzz x kkk';

La oss si at vi i denne strengen ønsker å finne delstrengen 'aeeex' etter følgende mønster: bokstaven 'a', deretter hvilket som helst tegn en eller flere ganger, deretter bokstaven 'x'.

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

Vi forventer at variabelen som et resultat vil inneholde strengen '! zzz x kkk'. Imidlertid er ikke dette tilfellet - variabelen får strengen '! kkk'.

Hele poenget er at vårt regulære uttrykk søker etter alle tegn fra bokstaven 'a' til bokstaven 'x'. Men i strengen vår er det to bokstaver 'x'! På grunn av grådigheten blir resultatet at det regulære uttrykket søker til den siste 'x'en, og fanger dermed noe annet enn det vi forventet.

Selvfølgelig er denne oppførselen ofte det vi ønsker. Men akkurat i dette tilfellet ønsket vi å oppheve grådigheten og fortelle det regulære uttrykket at det skal søke frem til den første 'x'en.

For å begrense grådigheten, må du sette et spørsmålstegn etter repetisjonsoperatoren:

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

Grådighet kan begrenses for alle repetisjonsoperatorer: både *, ?, og {} - slik: *?, ?? og {}?.

Gitt strengen:

let str = 'aba accca azzza wwwwa';

Skriv et regulært uttrykk som finner alle strenger som har bokstaven 'a' på kantene, og erstatter hver av dem med '!'. Mellom bokstavene 'a' kan det være hvilket som helst tegn (bortsett fra 'a').

Norsk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi bruker informasjonskapsler for nettstedets funksjonalitet, analyse og personalisering. Behandling av data foregår i henhold til Personvernerklæringen.
godta alle tilpass avvis