JavaScript регляр ифодаларида мусбат ва салбий кўриб чиқиш
Баъзан шундай вазифани ечиш керак бўлади: сатрни
'aaa' топинг ва уни '!' билан
алмаштиринг,
лекин факат 'aaa' дан кейин
'x' турганда, 'x' ни ўзини
эса алмаштирманг. Агар биз вазифани
"тўғридан-тўғри" ечишга ҳаракат қилсак,
ундурмаймиз:
'aaax baaa'.replace(/aaax/g, '!'); // '! baaa' қайтаради, лекин биз '!x baaa' ни мақсад қилган эдик
Олдга қараб кўриб чиқиш
Вазифани ечиш учун 'x' ни алмаштириш
шарт эмаслигини айта оладиган усул керак. Бу
(?= ) махсус қавслари ёрдамида бажарилади,
улар фақат кўриб чиқади, лекин ўзлари билан олмайди.
Бу қавслар олдга қараб мусбат кўриб чиқиш
дейилади. Мусбат - чунки 'x'
(бизнинг ҳолатимизда) мавжуд бўлиши керак - факат
шунда алмашиниш амалга ошади.
Келинг, ушбу қавсларни бизнинг вазифамизни ечиш учун қўллаймиз:
'aaax aaab'.replace(/aaa(?=x)/g, '!'); // '!x aaab' қайтаради
Олдга қараб салбий кўриб чиқиш
- (?! ) - ҳам мавжуд. У, аксінча, бирор
нарса мавжуд бўлмаслиги кераклигини айтади. Кейинги
мисолда, алмашиниш факат 'aaa' дан кейин
'x' ТУРМАГАНДАгина амалга ошади:
'aaax aaab'.replace(/aaa(?!x)/g, '!'); // 'aaax !b' қайтаради
Ортга қараб кўриб чиқиш
Худди шунингдек, ортга қараб мусбат кўриб чиқиш
- (?<= ) ҳам мавжуд. Кейинги
мисолда, алмашиниш факат 'aaa' дан олдин
'x' тургандагина амалга ошади:
'xaaa'.replace(/(?<=x)aaa/g, '!'); // 'x!' қайтаради
Шунингдек, ортга қараб салбий кўриб чиқиш
- (?<! ) ҳам мавжуд. Кейинги мисолда алмашиниш
факат 'aaa' дан олдин
'x' ТУРМАГАНДАгина амалга ошади:
'baaa'.replace(/(?<!x)aaa/g, '!'); // 'b!' қайтаради
Амалий вазифалар
Функция номларини ўз ичига олган сатр берилган:
let str = 'func1() func2() func3()';
Сатрдан функция номлари массавини олинг.
Тег билан сатр берилган:
let str = '<a href="" class="eee" id="zzz">';
Ушбу тегнинг атрибут номлари массавини олинг.
Ўзгарувчилар билан сатр берилган:
let str = '$aaa $bbb $ccc xxxx';
Олдида доллар белгиси турган қисм сатрларни олинг.