Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Menggantikan Berbilang Rentetan dengan Cekap dalam JavaScript?

Bagaimana untuk Menggantikan Berbilang Rentetan dengan Cekap dalam JavaScript?

Linda Hamilton
Linda Hamiltonasal
2024-11-29 17:14:10839semak imbas

How to Efficiently Replace Multiple Strings in JavaScript?

Penggantian Rentetan Beramai-ramai dalam JavaScript

Tugas menggantikan berbilang perkataan dalam rentetan dengan yang berbeza sering timbul dalam pengaturcaraan. Pertimbangkan senario berikut:

const str = "I have a cat, a dog, and a goat.";

Kami mahu mengubah rentetan ini menjadi "Saya ada anjing, kambing dan kucing" dengan menggantikan "kucing" dengan "anjing", "anjing" dengan "kambing" ", dan "kambing" dengan "kucing".

Masalah: Penggantian Berturut-turut Membawa kepada Tidak Betul Output

Pendekatan naif akan melibatkan penggunaan kaedah replace() beberapa kali:

str = str.replace(/cat/gi, "dog");
str = str.replace(/dog/gi, "goat");
str = str.replace(/goat/gi, "cat");

Malangnya, kod ini menghasilkan hasil yang salah: "Saya ada kucing, kucing , dan seekor kucing". Ini kerana penggantian kedua dan ketiga menimpa perubahan yang dibuat oleh yang sebelumnya.

Penyelesaian: Menggunakan Peta dan Fungsi Penggantian Tersuai

Untuk menangani isu ini, kita memerlukan pendekatan yang lebih menyeluruh yang menggantikan semua perkataan sasaran secara serentak. Ini boleh dicapai dengan mentakrifkan objek peta yang mengandungi penggantian dan menggunakan fungsi penggantian tersuai:

const mapObj = {
  cat: "dog",
  dog: "goat",
  goat: "cat",
};

const str = str.replace(/cat|dog|goat/gi, (matched) => {
  return mapObj[matched];
});

Menjana Corak Regex Secara Dinamik

Untuk membuat penyelesaian lebih umum, kita boleh menjana corak ungkapan biasa secara dinamik berdasarkan kekunci peta objek:

const re = new RegExp(Object.keys(mapObj).join("|"), "gi");

const str = str.replace(re, (matched) => {
  return mapObj[matched];
});

Fungsi Boleh Guna Semula untuk Penggantian Rentetan Jisim

Akhir sekali, kita boleh merangkum pendekatan ini ke dalam fungsi boleh guna semula:

const replaceAll = (str, mapObj) => {
  const re = new RegExp(Object.keys(mapObj).join("|"), "gi");

  return str.replace(re, (matched) => {
    return mapObj[matched.toLowerCase()];
  });
};

Fungsi ini mengambil rentetan dan peta penggantian serta mengembalikan rentetan yang diubah.

Dalam ringkasan, terdapat beberapa cara untuk menggantikan berbilang rentetan dengan berbilang rentetan lain dalam JavaScript. Penyelesaian yang dibentangkan di sini menggunakan objek peta dan fungsi penggantian tersuai untuk memastikan semua penggantian dilakukan serentak, menghasilkan output yang diingini dengan tepat.

Atas ialah kandungan terperinci Bagaimana untuk Menggantikan Berbilang Rentetan dengan Cekap dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn