JavaScript'te boşlukların alt çizgi ile değiştirilmesi?


354

_ İle boşlukları değiştirmek için bu kodu kullanmaya çalışıyorum, dizede ilk boşluk için çalışır, ancak boşluk diğer tüm örnekleri değişmeden kalır. Nedenini bilen var mı?

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

Yanıtlar:


695

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

Düzenleme : veya .split(' ').join('_')RE'lerden kaçınma durumunuz varsa

Düzenleme : John Resig dedi :

Statik bir arama ve statik bir değiştirmeyle bir dizeyi arar ve değiştirirseniz, eylemi .split ("match") ile gerçekleştirmek daha hızlıdır. Bu şekilde çoğu modern tarayıcıda. (Firefox'un bir sonraki sürümünde .replace (/ match / g, "replace") performansını büyük ölçüde iyileştirmek için değişiklikler yapılıyor - bu nedenle önceki ifade uzun sürmeyecek.)


1
Normal ifade olmadan bunu yapmanın bir yolu var mı?
Click Olumlu oy

14
.split ('') .join ('_')
Hilal Taze

7
Yerine / /gkullanımı /\ /gJavaScript hem iş hem de -. İkincisi CoffeeScript'te de çalışır.
Tom Leys

27
2015 itibari ile .replace(/ /g,"_");daha hızlıdır .split(' ').join('_').
Gabriel Tomitsuka

8
Bu @Inez'e göz atan gelecekteki insanlar, bölünmüş / VS'ye her iki hızı test etmek için bir bağlantıya sahiptir. değiştirin. 2018'in sonlarından itibaren değiştirme önemli ölçüde daha hızlı.
ricks


58

Prasanna'nın aşağıdaki sorusunu cevaplamak için:

Javascript'te birden çok boşluğu tek boşlukla nasıl değiştirirsiniz?

Aynı işlevi replacefarklı bir normal ifadeyle kullanırsınız. Boşluk \sifadesi ve "1 veya daha fazla kez" ifadesi +artı işaretidir, bu yüzden Adam'ın cevabını aşağıdakiyle değiştirirsiniz:

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

31

Bunu deneyebilirsin

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

Hatta birden çok alanı tek '-' ile değiştirecektir.


3
Muhtemelen dikkat çekici: Bu aynı zamanda sekmeleri diğer boşluklardan da çıkarır.
Berry M.

18

Bunun için JS performans testi oluşturdum http://jsperf.com/split-and-join-vs-replace2


1
Bugünlerde yerini almak daha iyi genel bir seçim gibi görünüyor
Houman

Kave - ne? Tüm tarayıcılar eşit olmasa da, ortalama olarak bölme / katılma çok daha iyidir. Aslında, birçok modern tarayıcıda, daha iyi bir ton! Bunu ayarladığınız için teşekkürler Inez!
David Hobs

4
Şimdi bir yıldan biraz fazla bir süre sonra ve yukarıdaki testi Chrome 32.0.1700.107'de çalıştırmak .. str.replace () çok daha iyi sonuçlar verir (% 64 daha hızlı)
jenovachild

12

Boşlukları alt çizgi ile değiştir

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

Çıktı: How_are_you


3

Bu eski olduğunu biliyorum ama ben String uzanan kimse görmedim 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
Korkunç bir fikir olduğu için kimsenin bunu yapmadığını görmedin. Daha fazla bilgi için bu diğer SO sorusuna göz atın.

2

Sadece şunu kullanarak replace:

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


3
Bu sadece bundan sonraki ilk alanın yerini alacak
Narendra
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.