Kufizimi i lakmisë në shprehjet e rregullta në JavaScript
Shprehjet e rregullta janë lakmode si parazgjedhje. Kjo do të thotë se ato kapin numrin maksimal të mundshëm të karaktereve. Le ta shpjegojmë me një shembull. Le të themi se kemi këtë varg:
let str = 'aeeex zzz x kkk';
Le të themi se në këtë varg duam të gjejmë nënvargun
'aeeex' sipas modelit të mëposhtëm: shkronja
'a', pastaj çdo karakter një ose më shumë
herë, pastaj shkronja 'x'.
let res = str.replace(/a.+x/g, '!');
Ne pritsim që në variabël si rezultat
të shkruhet vargu '! zzz x kkk'. Megjithatë,
kjo nuk ndodh - në variabël përfundon vargu
'! kkk'.
E gjithë çështja është se shprehja jonë e rregullt kërkon të gjitha
karakteret nga shkronja 'a' deri te shkronja 'x'.
Por në vargun tonë janë dy shkronja 'x'! Për shkak
të lakmisë del se shprehja e rregullt kërkon deri
te 'x'-i i fundit, duke kapur kështu
diçka tjetër nga ajo që ne prisnim.
Sigurisht, shpesh kjo sjellje është ajo që na duhet. Por konkretisht në këtë rast, ne do të dëshironim të çaktivizonim lakminë dhe t'i thoshim shprehjes së rregullt të kërkonte deri te 'x'-i i parë.
Për të kufizuar lakminë, duhet të vendosni shenjën pyetje pas operatorit të përsëritjes:
let res = str.replace(/a.+?x/g, '!');
Lakmia mund të kufizohet për të gjithë operatorët
e përsëritjes: si *, ashtu edhe ?, dhe {}
- kështu: *?, ?? dhe {}?.
Është dhënë vargu:
let str = 'aba accca azzza wwwwa';
Shkruani një shprehje të rregullt që do të gjejë të gjithë vargjet
anët e të cilëve janë shkronjat 'a',
dhe do të zëvendësojë secilën prej tyre me '!'. Midis
shkronjave 'a' mund të ketë çdo karakter (përveç
'a').