Uchunguzi wa Mtazamo Chanya na Hasifu katika Usanifu mara kwa mara wa JavaScript
Wakati mwingine tunahitaji kutatua tatizo la aina hii: pata
mfumo wa herufi 'aaa' na ubadilishe kuwa '!',
lakini tu ikiwa baada ya 'aaa' kuna
'x', na 'x' yenyewe
usibadilishe. Tukijaribu kutatua tatizo hili
'moja kwa moja', hatutafanikiwa:
'aaax baaa'.replace(/aaax/g, '!'); // itarudi '! baaa', lakini tulitaka '!x baaa'
Uchunguzi Mbele
Ili kutatua tatizo, tunahitaji njia ya kusema
kwamba 'x' haipaswi kubadilishwa. Hii
inafanywa kwa kutumia mabano maalum (?= ),
ambayo hutazama tu, lakini haichukui pamoja nayo.
Mabano haya yanaitwa uchunguzi chanya wa mbele.
Chanya - kwa sababu 'x'
(katika kesi yetu) lazima iwepo - ndipo tu
badilisha litakalotokea.
Wacha tutumie mabano haya kutatua tatizo letu:
'aaax aaab'.replace(/aaa(?=x)/g, '!'); // itarudi '!x aaab'
Kuna pia uchunguzi hasifu wa mbele
- (?! ) - kinyume chake, inasema kwamba
kitu hakipaswi kuwepo. Katika mfano ufuatao,
badilisha litatokea, tu ikiwa baada ya 'aaa'
hakuna 'x':
'aaax aaab'.replace(/aaa(?!x)/g, '!'); // itarudi 'aaax !b'
Uchunguzi Nyuma
Vivyo hivyo kuna uchunguzi chanya wa nyuma
- (?<= ). Katika mfano ufuatao
badilisha litatokea, tu ikiwa kabla ya
'aaa' kuna 'x':
'xaaa'.replace(/(?<=x)aaa/g, '!'); // itarudi 'x!'
Na kuna pia uchunguzi hasifu wa nyuma
- (?<! ). Katika mfano ufuatao badilisha
litatokea, tu ikiwa kabla ya 'aaa'
hakuna 'x':
'baaa'.replace(/(?<!x)aaa/g, '!'); // itarudi 'b!'
Matatizo ya Vitendo
Kuna mfumo wa herufi ulio na majina ya vitendakazi:
let str = 'func1() func2() func3()';
Pata orodha ya majina ya vitendakazi kutoka kwenye mfumo wa herufi.
Kuna mfumo wa herufi ulio na lebo:
let str = '<a href="" class="eee" id="zzz">';
Pata orodha ya majina ya sifa za lebo hii.
Kuna mfumo wa herufi ulio na vigeugeu:
let str = '$aaa $bbb $ccc xxxx';
Pata sehemu ndogo za mfumo wa herufi, ambazo kabla yake kuna alama ya dola.