⊗jsSpRERMC 127 of 294 menu

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'
azswuzhuen