Lihat cuplikan kode saya di bawah ini:
var list = ['one', 'two', 'three', 'four'];
var str = 'one two, one three, one four, one';
for ( var i = 0; i < list.length; i++)
{
if (str.endsWith(list[i])
{
str = str.replace(list[i], 'finish')
}
}
Saya ingin mengganti kemunculan terakhir dari kata satu dengan kata selesai dalam string, apa yang saya miliki tidak akan berfungsi karena metode ganti hanya akan menggantikan kemunculan pertama itu. Adakah yang tahu bagaimana saya bisa mengubah potongan itu sehingga hanya menggantikan contoh terakhir dari 'satu'
javascript
string
replace
Ruth
sumber
sumber
new RegExp(string)
), dan sintaks sebaris (/something/
). Anda tidak memerlukan karakter "/" saat menggunakan konstruktor RegExp.` - things like
+,
*,
? `, Tanda kurung, tanda kurung siku, mungkin hal-hal lain.Anda bisa menggunakan
String#lastIndexOf
untuk menemukan kemunculan terakhir dari kata tersebut, laluString#substring
dan penggabungan untuk membuat string pengganti.... atau di sepanjang garis itu.
sumber
Saya tahu ini konyol, tetapi saya merasa kreatif pagi ini:
Jadi sungguh, yang perlu Anda lakukan adalah menambahkan fungsi ini ke prototipe String:
Kemudian jalankan seperti ini:
str = str.replaceLast('one', 'finish');
Salah satu batasan yang harus Anda ketahui adalah, karena fungsinya dipisahkan oleh spasi, Anda mungkin tidak dapat menemukan / mengganti apa pun dengan spasi.Sebenarnya, sekarang setelah saya memikirkannya, Anda bisa mengatasi masalah 'ruang' dengan memisahkan dengan token kosong.
sumber
Tidak seanggun jawaban regex di atas, tetapi lebih mudah diikuti bagi yang tidak terlalu paham di antara kita:
Saya menyadari ini kemungkinan lebih lambat dan lebih boros daripada contoh regex, tetapi saya pikir ini mungkin berguna sebagai ilustrasi tentang bagaimana manipulasi string dapat dilakukan. (Ini juga bisa sedikit diringkas, tetapi sekali lagi, saya ingin setiap langkah menjadi jelas.)
sumber
Berikut adalah metode yang hanya menggunakan pemisahan dan penggabungan. Ini sedikit lebih mudah dibaca jadi saya pikir itu layak untuk dibagikan:
sumber
what
sama sekali. misalnya'foo'.replaceLast('bar'); // 'barfoo'
Pikir saya akan menjawab di sini karena ini muncul pertama kali dalam pencarian Google saya dan tidak ada jawaban (di luar jawaban kreatif Matt :)) yang secara umum menggantikan kemunculan terakhir dari serangkaian karakter ketika teks yang akan diganti mungkin tidak ada di bagian akhir dari string.
sumber
Jawaban sederhana tanpa regex adalah:
sumber
Tidak bisakah Anda membalikkan string dan hanya mengganti kemunculan pertama dari pola pencarian terbalik? Saya berpikir . . .
sumber
Jika kecepatan itu penting, gunakan ini:
Ini lebih cepat daripada menggunakan RegExp.
sumber
Solusi sederhana akan menggunakan metode substring. Karena string diakhiri dengan elemen list, kita dapat menggunakan string.length dan menghitung indeks akhir untuk substring tanpa menggunakan
lastIndexOf
metodestr = str.substring(0, str.length - list[i].length) + "finish"
sumber
Kode kuno dan besar tetapi seefisien mungkin:
sumber
Saya tidak menyukai salah satu jawaban di atas dan muncul di bawah
Pemakaian:
Semoga membantu!
sumber
Saya akan menyarankan untuk menggunakan paket npm replace-last .
Ini berfungsi untuk penggantian string dan regex.
sumber
sumber