⊗jsSpRELAB 133 of 294 menu

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';

Олдида доллар белгиси турган қисм сатрларни олинг.

bndatrhums