2010-07-20 26 views

cevap

107

değiştirin:

str = str.replace(/ +(?=)/g,''); 

Kredi: Bunu gerçekleştirmek için kullanabilirsiniz normal ifadeler için bir çok seçenek vardır yukarıdaki regex Regex to replace multiple spaces with a single space

+30

burada en iyi çözüm. s = s.replace (/ +/g, ""); – InfinitiesLoop

+0

Çok doğru :) --insley daha fazla karakter-- – Josiah

+0

'str = '' + str.replace (/ + (? =)/G, '')' str 'undefinied' veya NaN' :) – Val

31

alındı. iyi bir performans göstereceğini Bir örnektir:

str.replace(/\s\s+/g, ' ') 

tam bu sorun üzerinde tam bir tartışma için bu soruya bakın: Regex to replace multiple spaces with a single space

+0

teşekkürler bu sadece regex Benim için çalışan bir –

+0

Bu sadece denedim ve benim durumum için çalıştı. –

3

Ayrıca düzenli ifade vermeden değiştirebilir. Tüm niceleyicinin n unutun

while(str.indexOf(' ')!=-1)str.replace(' ',' '); 
+1

Çok çalışıyor ... Soru: hangisi daha verimli? Bu sürüm veya normal ifade sürümü. Yeterince pratik yapmadığımız için regex tercihim var. –

+0

Bilmiyorum-eşleşme yok, bu yöntem daha verimli. Çok fazla eşleşme varsa, biri yanlış yapıyor. – kennebec

+0

İşte bir [keman] (http://jsfiddle.net/NickT/ScJKw/1/), umarım, farkı vurgular. Normal ifadelerin, her durumda, en azından döngü sürümleri kadar hızlı olduğunu açıkça gösterir. Döngü versiyonunun kötü olmadığını söylemek gerekirse, sadece birinin ürünün sürekliliğini ve evrimini göz önünde bulundurması gerektiğini belirtmek yeterlidir. –

18

{X,} http://www.w3schools.com/jsref/jsref_regexp_nxcomma.asp

Bu da çalışır

str = str.replace(/\s{2,}/g, ' '); 
+0

Ayrıca, her çeşit regex çeşidi ve tam referans için [Normal İfade] (http://www.regular-expressions.info/) web sitesini de kullanabilirsiniz. –

+1

Basit bir + üzerinde parantez nicemleyici kullanımındaki gelişme nedir? –

+0

@ bazı-olmayan-tanımlayıcı-kullanıcı '/ \ s +/g' ayrıca tek boşlukların yerini alır (buna gerek yoktur) ama'/\ s \ s +/g' veya '/ \ s {2,}/g' sadece çoklu boşlukları değiştirin. –

İlgili konular