JavaScript Düzenli İfadelerde Pozitif ve Negatif İnceleme
Bazen şu tür bir problemi çözmek gerekir:
'aaa' dizesini bul ve '!' ile değiştir,
ancak sadece 'aaa''dan sonra
'x' geliyorsa, ve 'x''in kendisi
değiştirilmesin. Eğer problemi 'doğrudan'
çözmeye çalışırsak, başarılı olamayız:
'aaax baaa'.replace(/aaax/g, '!'); // '! baaa' döndürür, oysa '!x baaa' istiyorduk
İleri İnceleme
Problemi çözmek için, 'x''in
değiştirilmemesi gerektiğini söylemenin bir yoluna
ihtiyaç var. Bu, yalnızca bakar ancak eşleşmeye
dahil etmez (tüketmez) olan (?= ) özel
parantezleri ile yapılır.
Bu parantezlere pozitif ileri inceleme
denir. Pozitif - çünkü 'x' (bizim durumumuzda)
olmalıdır - ancak o zaman değiştirme gerçekleşir.
Şimdi bu parantezleri problemimizi çözmek için kullanalım:
'aaax aaab'.replace(/aaa(?=x)/g, '!'); // '!x aaab' döndürür
Ayrıca negatif ileri inceleme
vardır - (?! ) - bu, tam tersine, bir şeyin
olmaması gerektiğini söyler. Bir sonraki örnekte,
değiştirme sadece 'aaa''dan sonra
'x' OLMADIĞI zaman gerçekleşir:
'aaax aaab'.replace(/aaa(?!x)/g, '!'); // 'aaax !b' döndürür
Geriye İnceleme
Benzer şekilde pozitif geriye inceleme
vardır - (?<= ). Bir sonraki
örnekte, değiştirme sadece 'aaa''dan
önce 'x' geldiğinde gerçekleşir:
'xaaa'.replace(/(?<=x)aaa/g, '!'); // 'x!' döndürür
Ve ayrıca negatif geriye inceleme
vardır - (?<! ). Bir sonraki örnekte
değiştirme, sadece 'aaa''dan
önce 'x' OLMADIĞI zaman gerçekleşir:
'baaa'.replace(/(?<!x)aaa/g, '!'); // 'b!' döndürür
Pratik Problemler
Fonksiyon isimleri içeren bir dize verildi:
let str = 'func1() func2() func3()';
Dizeden fonksiyon isimlerini içeren bir dizi elde edin.
Bir HTML etiketi içeren bir dize verildi:
let str = '<a href="" class="eee" id="zzz">';
Bu etiketin öznitelik isimlerini içeren bir dizi elde edin.
Değişkenler içeren bir dize verildi:
let str = '$aaa $bbb $ccc xxxx';
Önünde dolar işareti olan alt dizeleri elde edin.