⊗jsSpREGL 101 of 294 menu

Begränsa girighet i reguljära uttryck i JavaScript

Reguljära uttryck är som standard giriga. Det betyder att de fångar maximalt möjligt antal tecken. Låt oss ta ett exempel. Antag att vi har en sträng som ser ut så här:

let str = 'aeeex zzz x kkk';

Antag att vi i denna sträng vill hitta delsträngen 'aeeex' enligt följande mönster: bokstaven 'a', sedan valfritt tecken en eller flera gånger, sedan bokstaven 'x'.

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

Vi förväntar oss att variabeln som ett resultat ska innehålla strängen '! zzz x kkk'. Men så är det inte - variabeln innehåller strängen '! kkk'.

Anledningen är att vårt reguljära uttryck söker alla tecken från bokstaven 'a' till bokstaven 'x'. Men i vår sträng finns det två bokstäver 'x'! På grund av girigheten händer det så att det reguljära uttrycket söker till den sista 'x':en, och därmed fångar inte det vi förväntade oss.

Naturligtvis är detta beteende oftast vad vi behöver. Men just i det här fallet skulle vi vilja avbryta girigheten och tala om för det reguljära uttrycket att det ska söka till den första 'x':en.

För att begränsa girigheten måste du sätta ett frågetecken efter repetitionsoperatorn:

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

Girighet kan begränsas för alla repetitionsoperatorer: både *, och ?, och {} - så här: *?, ?? och {}?.

Given en sträng:

let str = 'aba accca azzza wwwwa';

Skriv ett reguljärt uttryck som hittar alla strängar som har bokstaven 'a' i båda ändar, och ersätter varje sådan sträng med '!'. Mellan bokstäverna 'a' får finnas valfritt tecken (förutom 'a').

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