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.