Penggantian Rentetan Berbilang dalam JavaScript
Penggantian rentetan ialah tugas biasa dalam pengaturcaraan. Dalam JavaScript, kaedah replace() membolehkan anda menggantikan satu padanan rentetan tertentu dengan yang baharu. Walau bagaimanapun, bagaimana jika anda ingin menggantikan berbilang rentetan dengan berbilang rentetan lain pada masa yang sama?
Pertimbangkan contoh berikut:
var str = "I have a cat, a dog, and a goat."; // Attempt to replace multiple strings with incorrect results str = str.replace(/cat/gi, "dog"); str = str.replace(/dog/gi, "goat"); str = str.replace(/goat/gi, "cat"); // Output: "I have a cat, a cat, and a cat"
Seperti yang anda lihat, ini tidak menghasilkan yang diingini hasil daripada "Saya mempunyai seekor anjing, seekor kambing dan seekor kucing." Sebaliknya, ia secara salah menggantikan setiap contoh "kucing" dengan "anjing," dan seterusnya.
Penyelesaian Khusus
Untuk mencapai hasil yang diinginkan, anda boleh menggunakan berfungsi untuk mengendalikan setiap penggantian:
var str = "I have a cat, a dog, and a goat."; var mapObj = { cat:"dog", dog:"goat", goat:"cat" }; str = str.replace(/cat|dog|goat/gi, function(matched){ return mapObj[matched]; }); // Output: "I have a dog, a goat, and a cat"
Dalam pendekatan ini, kami mencipta objek peta (mapObj) yang mentakrifkan pasangan rentetan nilai kunci untuk diganti. Kemudian, kami menggunakan ungkapan biasa yang sepadan dengan mana-mana rentetan ini dan menggantikannya dengan nilai yang sepadan daripada objek peta.
Mengerti Penyelesaian
Untuk menyamaratakan pendekatan ini , anda boleh mencipta ungkapan biasa secara dinamik dan mengemas kini objek peta seperti yang diperlukan:
var mapObj = {cat:"dog",dog:"goat",goat:"cat"}; var re = new RegExp(Object.keys(mapObj).join("|"),"gi"); str = str.replace(re, function(matched){ return mapObj[matched]; });
Pendekatan ini membolehkan anda menambah atau mengalih keluar penggantian berpasangan tanpa mengubah suai ungkapan biasa itu sendiri.
Fungsi Boleh Guna Semula
Untuk merumuskan lagi proses, anda boleh mencipta fungsi boleh guna semula:
function replaceAll(str,mapObj){ var re = new RegExp(Object.keys(mapObj).join("|"),"gi"); return str.replace(re, function(matched){ return mapObj[matched.toLowerCase()]; }); }
Anda kemudiannya boleh menggunakan fungsi ini untuk menggantikan berbilang rentetan dengan berbilang rentetan lain dalam mana-mana rentetan tertentu.
Atas ialah kandungan terperinci Bagaimana untuk Melakukan Penggantian Rentetan Berbilang dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!