Kuzuia Uroho katika Usemi wa Kawaida katika JavaScript
Misemo ya kawaida kwa chaguo-msingi ni wanaochukua kila kitu. Hii inamaanisha kuwa hunasa idadi kubwa iwezekanavyo ya herufi. Wacha tuichambue kwa kutumia mfano. Hebu tuseme tuna mstari kama huu:
let str = 'aeeex zzz x kkk';
Wacha tuseme katika mstari huu tunataka kupata kishupi
'aeeex' kulingana na muundo ufuatao: herufi
'a', kisha herufi yoyote mara moja au zaidi,
kisha herufi 'x'.
let res = str.replace(/a.+x/g, '!');
Tunatarajia kuwa kwenye kibadilishaji matokeo
yataandikwa kwenye mstari '! zzz x kkk'. Hata hivyo,
si hivyo - kwenye kibadilishaji huingia mstari
'! kkk'.
Shida yote ni kwamba usemi wetu wa kawaida unatafuta herufi zote
kutoka herufi 'a' hadi herufi 'x'.
Lakini katika mstari wetu kuna herufi mbili 'x'! Kwa sababu
ya uroho hutokea kwamba usemi wa kawaida unatafuta hadi
herufi ya mwisho ya x, na hivyo kuchukua
sio kile tulichotarajia.
Bila shaka, mara nyingi tabia kama hii ndiyo tunayohitaji. Lakini hasa katika kesi hii tungependa kughairi uroho na kuwaambia usemi wa kawaida, itafute mpaka herufi ya kwanza ya x.
Ili kuzuia uroho, unahitaji kuweka alama ya kuuliza baada ya opereta wa kurudia:
let res = str.replace(/a.+?x/g, '!');
Uroho unaweza kuzuiwa kwa waendeshaji wote
wa kurudia: *, ?, na {}
- kama hivi: *?, ?? na {}?.
Umepewa mstari:
let str = 'aba accca azzza wwwwa';
Andika usemi wa kawaida, utakopata mistari yote
ambayo kwenye pembe zake kuna herufi 'a',
na utabadilisha kila moja kwa '!'. Kati
ya herufi 'a' kunaweza kuwa na herufi yoyote (isipokuwa
'a').