⊗jsSpRELAB 133 of 294 menu

JavaScript-də RegExp-də Müsbət və Mənfi Qabaqcadan Baxış

Bəzən bu tip məsələni həll etmək lazım gəlir: tap sətiri 'aaa' və onu '!' ilə əvəz et, lakin yalnız 'aaa'-dan sonra 'x' gəlirsə, özü 'x' isə əvəz edilməməlidir. Əgər biz məsələni 'birbaşa' həll etməyə çalışsaq, heç nə alınmayacaq:

'aaax baaa'.replace(/aaax/g, '!'); // qaytaracaq '! baaa', istədiyimiz isə '!x baaa' idi

Qabağa Baxış

Məsələni həll etmək üçün bir üsul lazımdır ki, 'x'-in əvəz edilməməli olduğunu göstərsin. Bu, xüsusi mötərizələr (?= ) ilə edilir, onlar yalnız yoxlayır, lakin özləri ilə götürmürlər.

Bu mötərizələr müsbət qabağa baxış adlanır. Müsbət - çünki 'x' (bizim vəziyyətimizdə) olmalıdır - yalnız o zaman əvəzetmə baş verəcək.

Gəlin bu mötərizələri bizim məsələmizi həll etmək üçün tətbiq edək:

'aaax aaab'.replace(/aaa(?=x)/g, '!'); // qaytaracaq '!x aaab'

Həm də mənfi qabağa baxış var - (?! ) - o, əksinə, bir şeyin olmaması lazım olduğunu bildirir. Aşağıdakı nümunədə, əvəzetmə yalnız 'aaa'-dan sonra 'x' OLMADIQDA baş verəcək:

'aaax aaab'.replace(/aaa(?!x)/g, '!'); // qaytaracaq 'aaax !b'

Geriye Baxış

Eyni qaydada müsbət geriyə baxış var - (?<= ). Aşağıdakı nümunədə əvəzetmə yalnız 'aaa'-dan əvvəl 'x' varsa baş verəcək:

'xaaa'.replace(/(?<=x)aaa/g, '!'); // qaytaracaq 'x!'

Həmçinin mənfi geriyə baxış da var - (?<! ). Aşağıdakı nümunədə əvəzetmə yalnız 'aaa'-dan əvvəl 'x' OLMADIQDA baş verəcək:

'baaa'.replace(/(?<!x)aaa/g, '!'); // qaytaracaq 'b!'

Praktik Məsələlər

Funksiya adlarını özündə cəmləşdirən sətir verilib:

let str = 'func1() func2() func3()';

Sətirdən funksiya adlarının massivini əldə edin.

Teqli sətir verilib:

let str = '<a href="" class="eee" id="zzz">';

Bu tegin atribut adlarının massivini əldə edin.

Dəyişənlər olan sətir verilib:

let str = '$aaa $bbb $ccc xxxx';

Qarşısında dollar işarəsi olan alt sətirləri əldə edin.

rokkuzltrru