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);
}
Klik Upvote
sumber

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.)

Crescent Fresh
sumber
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
62

coba ini:

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

itu akan melakukan pencarian / penggantian global

ganti javascript

Adam
sumber
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,"_");
Kaya
sumber
30

Anda bisa mencoba ini

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

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

Fizer Khan
sumber
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

Inez
sumber
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

Arshid KV
sumber
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.
};
Naga putih bermata biru
sumber
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);

Vibhu kumar
sumber
3
Ini hanya akan menggantikan ruang pertama bukan setelah itu
Narendra