Callback dalam Metode replace pada Regex JavaScript
Metode replace dapat menerima tidak hanya string sebagai parameter kedua, tetapi juga fungsi callback, yang akan diterapkan untuk setiap kecocokan yang ditemukan. Setiap substring yang ditemukan oleh regex akan diganti dengan apa yang dikembalikan oleh fungsi tersebut khusus untuk substring itu.
Parameter dapat diteruskan ke fungsi ini:
parameter pertama akan berisi string yang ditemukan,
parameter kedua - capture group pertama, parameter ketiga
- capture group kedua dan seterusnya - Anda dapat
membuat parameter sebanyak capture group
dalam ekspresi reguler.
Parameter kedua dari belakang akan berisi posisi kecocokan yang ditemukan, dan parameter terakhir - seluruh string tempat pencarian dilakukan.
Bagaimana semua ini bekerja - akan kita bahas dengan contoh-contoh praktis.
Contoh
Misalkan diberikan string dengan angka:
let str = '2 3 4 5';
Mari kita ganti angka-angka ini dengan kuadratnya. Pertama-tama, mari kita tampilkan angka-angka kita secara berurutan di konsol dalam fungsi callback:
str.replace(/\d+/g, function(match) {
console.log(match);
});
Kode kita akan menampilkan '2' terlebih dahulu, lalu
'3', '4' dan '5'. Artinya,
ke dalam variabel match secara berurutan masuk
string-string yang ditemukan oleh regex.
Mari kita selesaikan tugasnya - kita akan memangkatkan
match menjadi kuadrat dan mengembalikannya
menggunakan return. Hasilnya, untuk angka dua yang ditemukan
akan dikembalikan 4 dan angka dua akan diganti
menjadi empat ini, untuk angka tiga yang ditemukan akan dikembalikan
9 dan angka tiga akan diganti menjadi sembilan ini
- dan seterusnya:
let result = str.replace(/\d+/g, function (match) {
return match**2;
});
console.log(result); // menampilkan '4 9 16 25'
Contoh
Sekarang misalkan dalam string diberikan konstruksi berbentuk
'2+3=':
let str = '2+3= 4+5= 6+7=';
Mari kita buat agar setelah tanda sama dengan disisipkan jumlah dari angka-angka yang sesuai. Artinya, string kita harus berubah menjadi berikut:
'2+3=5 4+5=9 6+7=13'
Untuk menyelesaikan tugas, mari kita bereksperimen lagi
- letakkan suku pertama dan kedua ke dalam capture group terpisah:
str.replace(/(\d+)\+(\d+)=/g, function (match0, match1, match2) {
console.log(match0, match1, match2);
});
Dan sekarang mari kita selesaikan tugasnya: untuk setiap
substring yang ditemukan, jumlahkan capture group pertama dan
kedua, ambil capture group nol (string yang ditemukan,
misalnya '2+3='), tambahkan
hasilnya dan kembalikan semua ini melalui return:
let result = str.replace(/(\d+)\+(\d+)=/g, function(match0, match1, match2) {
let sum = Number(match1) + Number(match2);
return match0 + sum;
});
console.log(result);
Tugas Praktis
Diberikan string:
let str = 'aaa [2] bbb [3] ccc [12] ddd';
Temukan angka yang berada dalam tanda kurung dan tingkatkan dua kali lipat. Artinya dari string kita harus menjadi seperti berikut:
'aaa [4] bbb [6] ccc [24] ddd'
Diberikan string:
let str = '123 456 789';
Temukan semua angka dan balikkan digitnya dalam urutan terbalik. Artinya dari string kita harus menjadi seperti berikut:
'321 654 987'
Diberikan string dengan tanggal:
let str = '31.12.2025 30.11.2024 29.10.2023';
Temukan semua tanggal dan ubah formatnya sehingga menjadi string berikut:
'2025-12-31 2024-11-30 2023-10-29'