Mengganti spasi dengan garis bawah pada JavaScript?


353

Saya mencoba menggunakan kode ini untuk mengganti spasi dengan _, ini berfungsi untuk spasi pertama dalam string tetapi semua contoh spasi lainnya tetap tidak berubah. Adakah yang tahu mengapa?

function updateKey()
{
    var key=$("#title").val();
    key=key.replace(" ","_");
    $("#url_key").val(key);
}

Jawaban:


694

Mencoba .replace(/ /g,"_");

Edit : atau .split(' ').join('_')jika Anda memiliki keengganan pada RE

Sunting : John Resig berkata :

Jika Anda mencari dan mengganti melalui string dengan pencarian statis dan penggantian statis lebih cepat untuk melakukan tindakan dengan .split ("cocokkan") .gabung ("ganti") - yang tampaknya kontra-intuitif tetapi berhasil bekerja seperti itu di sebagian besar browser modern. (Ada perubahan yang terjadi untuk meningkatkan kinerja .replace (/ match / g, "replace") di versi Firefox berikutnya - sehingga pernyataan sebelumnya tidak akan berlaku lama.)


1
Apakah ada cara untuk melakukan ini tanpa regexp?
Klik Upvote

14
.split ('') .join ('_')
Crescent Fresh

7
Alih-alih / /gmenggunakan /\ /g- keduanya bekerja di Javascript. Yang terakhir juga berfungsi di CoffeeScript.
Tom Leys

27
Pada 2015 .replace(/ /g,"_");lebih cepat dari .split(' ').join('_').
Gabriel Tomitsuka

8
Orang-orang masa depan yang menelusuri @Inez ini memiliki tautan untuk menguji kedua kecepatan split / join VS. menggantikan. Pada akhir 2018 ganti secara signifikan lebih cepat.
ricks


58

Untuk menjawab pertanyaan Prasanna di bawah ini:

Bagaimana Anda mengganti beberapa spasi dengan spasi tunggal di Javascript?

Anda akan menggunakan fungsi yang sama replacedengan ekspresi reguler yang berbeda. Ekspresi untuk spasi putih adalah \sdan ekspresi untuk "1 atau lebih kali" adalah +tanda plus, jadi Anda hanya akan mengganti jawaban Adam dengan yang berikut:

key=key.replace(/\s+/g,"_");

30

Anda bisa mencoba ini

 var str = 'hello     world  !!';
 str = str.replace(/\s+/g, '-');

Ia bahkan akan mengganti banyak spasi dengan '-' tunggal.


3
Mungkin perlu diperhatikan: Ini juga menghapus tab spasi putih lainnya.
Berry M.

18

Saya membuat uji kinerja JS untuknya http://jsperf.com/split-and-join-vs-replace2


1
sepertinya saat ini ganti adalah pilihan keseluruhan yang lebih baik
Houman

Kave - apa? Meskipun tidak semua browser sama, rata-rata split / join jauh lebih baik. Bahkan, di banyak browser modern, ini adalah nada yang lebih baik! Terima kasih Inez untuk pengaturan ini!
David Hobs

4
Sedikit lebih dari setahun kemudian sekarang dan menjalankan tes di atas di Chrome 32.0.1700.107 .. str.replace () menghasilkan hasil yang jauh lebih baik (64% lebih cepat)
jenovachild

12

Ganti spasi dengan garis bawah

var str = 'How are you';
var replaced = str.split(' ').join('_');

Output: How_are_you


3

Saya tahu ini sudah tua tapi saya tidak melihat ada yang menyebutkan memperpanjang String prototype.

String.prototype.replaceAll = function(search, replace){
    if(!search || !replace){return this;} //if search entry or replace entry empty return the string
    return this.replace(new RegExp('[' + search + ']', 'g'), replace); //global RegEx search for all instances ("g") of your search entry and replace them all.
};

1
Anda tidak melihat ada yang melakukannya karena itu ide yang buruk. Lihat pertanyaan SO lainnya ini untuk lebih lanjut.

2

Hanya menggunakan replace:

var text = 'Hello World';
    
new_text = text.replace(' ', '_');
    
console.log(new_text);


3
Ini hanya akan menggantikan ruang pertama bukan setelah itu
Narendra
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.