Kolbalik dalam Kaedah replace dalam Ungkapan Biasa JavaScript
Kaedah replace dengan parameter kedua boleh menerima bukan hanya rentetan, tetapi juga fungsi-kolbalik, yang akan digunakan untuk setiap padanan yang ditemui. Setiap subrentetan yang ditemui oleh ungkapan biasa akan digantikan dengan apa yang dikembalikan oleh fungsi tersebut khusus untuk subrentetan itu.
Parameter boleh diserahkan kepada fungsi ini: parameter pertama akan menerima rentetan yang ditemui, parameter kedua - kumpulan pertama, parameter ketiga - kumpulan kedua dan seterusnya - anda boleh membuat seberapa banyak parameter yang diingini, mengikut bilangan kumpulan dalam ungkapan biasa.
Parameter kedua terakhir akan menerima kedudukan padanan yang ditemui, dan parameter terakhir - keseluruhan rentetan di mana carian dilakukan.
Bagaimana semua ini berfungsi - kita akan terokai melalui contoh praktikal.
Contoh
Katakan diberikan rentetan dengan nombor:
let str = '2 3 4 5';
Mari kita gantikan nombor-nombor ini dengan kuasa duanya. Sebagai permulaan, mari kita hanya outputkan nombor-nombor kita satu persatu ke konsol dalam fungsi-kolbalik:
str.replace(/\d+/g, function(match) {
console.log(match);
});
Kod kami akan outputkan pertama '2', kemudian
'3', '4' dan '5'. Iaitu
ke dalam pembolehubah match secara berurutan dimasukkan
rentetan-rentetan yang ditemui oleh ungkapan biasa.
Mari kita selesaikan tugas sehingga selesai - kita akan menduakan
match dan mengembalikannya
menggunakan return. Hasilnya, untuk dua yang ditemui
akan dikembalikan 4 dan dua akan digantikan
dengan empat ini, untuk tiga yang ditemui akan dikembalikan
9 dan tiga akan digantikan dengan sembilan ini
- dan seterusnya:
let result = str.replace(/\d+/g, function (match) {
return match**2;
});
console.log(result); // akan output '4 9 16 25'
Contoh
Sekarang katakan dalam rentetan diberikan konstruksi bentuk
'2+3=':
let str = '2+3= 4+5= 6+7=';
Mari kita buat supaya selepas sama dengan dimasukkan hasil tambah nombor-nombor yang sepadan. Iaitu rentetan kita harus bertukar menjadi yang berikut:
'2+3=5 4+5=9 6+7=13'
Untuk menyelesaikan tugas, mari kita bereksperimen lagi - letakkan nombor pertama dan kedua ke dalam kumpulan berasingan:
str.replace(/(\d+)\+(\d+)=/g, function (match0, match1, match2) {
console.log(match0, match1, match2);
});
Dan sekarang mari selesaikan tugas sepenuhnya: untuk setiap
subrentetan yang ditemui, tambahkan kumpulan pertama dan
kedua, ambil kumpulan sifar (rentetan yang ditemui,
contohnya '2+3='), tambahkan
kepadanya 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 Praktikal
Diberikan rentetan:
let str = 'aaa [2] bbb [3] ccc [12] ddd';
Cari nombor-nombor yang berada dalam kurungan dan gandakan mereka. Iaitu dari rentetan kita harus diperoleh yang berikut:
'aaa [4] bbb [6] ccc [24] ddd'
Diberikan rentetan:
let str = '123 456 789';
Cari semua nombor dan balikkan digitnya dalam urutan terbalik. Iaitu dari rentetan kita harus diperoleh yang berikut:
'321 654 987'
Diberikan rentetan dengan tarikh:
let str = '31.12.2025 30.11.2024 29.10.2023';
Cari semua tarikh dan tukarkannya kepada format lain supaya diperoleh rentetan berikut:
'2025-12-31 2024-11-30 2023-10-29'