JavaScript'te Düzenli İfadelerde replace Metodunda Geri Çağrı (Callback)
Replace metodu, ikinci parametre olarak sadece bir string değil, aynı zamanda bir geri çağrı fonksiyonu da alabilir. Bu fonksiyon, bulunan her eşleşme için uygulanacaktır. Düzenli ifadenin bulduğu her alt string, bu fonksiyonun o belirli alt string için döndürdüğü şeyle değiştirilecektir.
Bu fonksiyona parametreler aktarılabilir: ilk parametreye bulunan string, ikinci parametreye ilk yakalama grubu (capturing group), üçüncü parametreye ikinci yakalama grubu yerleştirilir ve bu böyle devam eder - düzenli ifadede kaç tane yakalama grubu varsa o kadar parametre yapılabilir.
Sonuncudan bir önceki parametreye, bulunan eşleşmenin konumu yerleştirilir ve son parametreye ise arama yapılan tüm string yerleştirilir.
Tüm bunların nasıl çalıştığını pratik örneklerle inceleyeceğiz.
Örnek
Sayılardan oluşan bir string verilsin:
let str = '2 3 4 5';
Bu sayıları kareleriyle değiştirelim. İlk olarak, geri çağrı fonksiyonunda sayılarımızı sırayla konsola yazdıralım:
str.replace(/\d+/g, function(match) {
console.log(match);
});
Kodumuz önce '2', sonra
'3', '4' ve '5' yazdıracaktır. Yani
match değişkenine sırayla
düzenli ifadenin bulduğu string'ler gelir.
Şimdi görevi sonuna kadar çözelim -
match'in karesini alalım ve
return ile döndürelim. Bulunan
2 için 4 dönecek ve iki bu dördün yerine geçecek,
bulunan üç için 9 dönecek ve üç bu dokuzun yerine geçecek
- ve bu böyle devam edecek:
let result = str.replace(/\d+/g, function (match) {
return match**2;
});
console.log(result); // '4 9 16 25' yazdırır
Örnek
Şimdi string'de '2+3=' şeklinde yapılar verilsin:
let str = '2+3= 4+5= 6+7=';
Eşittir işaretinden sonra ilgili sayıların toplamlarının gelmesini sağlayalım. Yani string'imiz şu hale dönüşmeli:
'2+3=5 4+5=9 6+7=13'
Görevi çözmek için yine deney yapalım - birinci ve ikinci terimleri ayrı yakalama gruplarına ayıralım:
str.replace(/(\d+)\+(\d+)=/g, function (match0, match1, match2) {
console.log(match0, match1, match2);
});
Şimdi görevi nihai olarak çözelim: Her
bulunan alt string için birinci ve
ikinci yakalama gruplarını toplayalım, sıfırıncı yakalama grubunu (bulunan
string, örneğin '2+3=') alalım,
ona toplamın sonucunu ekleyelim ve tümünü return ile döndürelim:
let result = str.replace(/(\d+)\+(\d+)=/g, function(match0, match1, match2) {
let sum = Number(match1) + Number(match2);
return match0 + sum;
});
console.log(result);
Pratik Görevler
Bir string verilsin:
let str = 'aaa [2] bbb [3] ccc [12] ddd';
Köşeli parantezler içindeki sayıları bulun ve iki katına çıkarın. Yani string'imizden şu string elde edilmeli:
'aaa [4] bbb [6] ccc [24] ddd'
Bir string verilsin:
let str = '123 456 789';
Tüm sayıları bulun ve rakamlarını ters çevirin. Yani string'imizden şu string elde edilmeli:
'321 654 987'
Tarihlerden oluşan bir string verilsin:
let str = '31.12.2025 30.11.2024 29.10.2023';
Tüm tarihleri bulun ve başka bir formata dönüştürerek aşağıdaki string'i elde edin:
'2025-12-31 2024-11-30 2023-10-29'