JavaScript kullanarak bir dizeden boşluklar nasıl kaldırılır?


552

Bir dizedeki boşluklar nasıl kaldırılır? Örneğin:

Giriş:

'/var/www/site/Brand new document.docx'

Çıktı:

'/var/www/site/Brandnewdocument.docx'

benim çözüm" ahm ed ".split('').filter(e => e.trim().length).join('')
UA_

Yanıtlar:


1224

Bu?

str = str.replace(/\s/g, '');

Misal

var str = '/var/www/site/Brand new document.docx';

document.write( str.replace(/\s/g, '') );


Güncelleme: Bu soruya dayanarak , bu:

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

daha iyi bir çözümdür. Aynı sonucu üretir, ancak daha hızlı yapar.

Normal İfade

\s"boşluk" ifadesinin normal ifadesidir ve g"global" bayraktır, yani TÜMÜ \s(boşluklar) ile eşleşir .

İçin harika bir açıklama burada+ bulunabilir .

Yan not olarak, tek tırnak işaretleri arasındaki içeriği istediğiniz herhangi bir şeyle değiştirebilirsiniz, böylece boşlukları başka bir dizeyle değiştirebilirsiniz.


@Gaurav SO'da benzer cevaplar aradım ve .replace(/\s+/g, '')daha sık görüyorum . Bu ve cevabım arasında bir fark var mı?
Šime Vidas

bu durumda fark yoktur. Ancak + en az bir olayla bulmak için kullanılır.
Gaurav

1
Aptal ben, .replace(' ','')işe yarayacak izlenim altındaydım . Çok takdir!
Andy Mercer

3
(Sime, düzenlemesinde bağlantı verilen) içeren orijinal cevap, +herhangi biri ona kredi vermek istiyorsa sadece 60 oyu var stackoverflow.com/a/5964427/4258817
Mousey

2
Yanlışlıkla normal ifadenizi alıntılamamaya dikkat edin, .replace('/\s+/g', '')çünkü bu değişmez dizeyi bulmaya çalışacaktır. Bu beni daha önce attı ...
RTF

75

var a = b = " /var/www/site/Brand new   document.docx ";

console.log( a.split(' ').join('') );
console.log( b.replace( /\s/g, '') ); 

Bunu yapmanın iki yolu!


4
Ben split () ve join () sevdim.
Eric Milliot-Martinez

2
split ('') ve join \ n, \ t beyaz boşluk karakterlerini kaldırmaz, başka bir geçici çözüm a.split (''). eşlemdir (c => c.trim ()). join ('')
rab

36

EN KISA ve HIZLI :str.replace(/ /g, '');


Karşılaştırma:

İşte sonuçlarım - (2018.07.13) Chrome 67.0.3396 (64 bit), Safari 11.0.3 (13604.5.6), Firefox 59.0.2 (64 bit) üzerinde MacOs High Sierra 10.13.3:

KISA dizeler

OP sorusundaki örneklere benzer kısa dize

resim açıklamasını buraya girin

Tüm tarayıcılarda en hızlı çözüm / /g(regexp1a) - Chrome 17.7M (işlem / sn), Safari 10.1M, Firefox 8.8M'dir. Tüm tarayıcılar için en yavaş split-joinçözüm oldu. Regexp olarak değiştirmek \sveya eklemek +ya ida regexp işlemi yavaşlatır.

UZUN dizeler

Yaklaşık 3 milyon karakter dizisi için sonuçlar:

  • regexp1a : Safari 50.14 ops / sn, Firefox 18.57, Chrome 8.95
  • regexp2b : Safari 38.39 , Firefox 19.45, Chrome 9.26
  • split-join : Firefox 26.41, Safari 23.10, Chrome 7.98,

Makinenizde çalıştırabilirsiniz: https://jsperf.com/remove-string-spaces/1


1
İlginç bir şekilde, split-join yöntemi benim için Firefox 73'te en hızlı, ardından% 53 daha yavaş regexp1a.
hackel

25

@Rsplak cevabını takip ederek: aslında, split / join yolunu kullanmak regexp kullanmaktan daha hızlı. Performans testi durumuna bakın

Yani

var result = text.split(' ').join('')

daha hızlı çalışır

var result = text.replace(/\s+/g, '')

Küçük metinlerde bu geçerli değildir, ancak zamanın önemli olduğu durumlarda, örneğin metin analizörlerinde, özellikle kullanıcılarla etkileşime girerken, bu önemlidir.


Öte yandan, \s+daha geniş alan karakterleri kullanır. İle arasında \nve \taynı zamanda maçları \u00a0karakteri ve o nedir  kullanarak metin alırken, içinde açıktır textDomNode.nodeValue.

Bu yüzden buradaki sonuç şu şekilde yapılabilir: sadece boşlukları değiştirmeniz gerekiyorsa ' ', split / join kullanın. Sembol sınıfının farklı sembolleri varsa - kullanınreplace(/\s+/g, '')


1
çok değil way faster . testi çalıştırdı ve Firefox 61'de sadece % 2.19 daha hızlı.
vsync


2
  var output = '/var/www/site/Brand new document.docx'.replace(/ /g, ""); 
    or
  var output = '/var/www/site/Brand new document.docx'.replace(/ /gi,"");

Not: Boşlukları kaldırmak için 'g' veya 'gi' kullansanız da her ikisi de aynı şekilde davranır.

Değiştir işlevinde 'g' kullanırsak, tam eşleşmeyi kontrol eder. ancak 'gi' kullanırsak, büyük / küçük harf duyarlılığını yok sayar.

referans için buraya tıklayın .


0

Normal ifade + Değiştir ()

Normal ifade daha yavaş olabilse de, birçok kullanım durumunda geliştirici, hızın önemsiz olduğunu düşünerek aynı anda yalnızca birkaç dizeyi manipüle eder. / / / \ S / 'den daha hızlı olsa da,' \ s 'ye sahip olmak, başka bir geliştiriciye neler olup bittiğini belki de daha açık bir şekilde açıklar.

let string = '/var/www/site/Brand new document.docx';
let path = string.replace(/\s/g, '');
// path => '/var/www/site/Brandnewdocument.docx'

Böl () + Katıl ()

Split + Join kullanımı, dizenin daha fazla zincirlenmesini sağlar.

let string = '/var/www/site/Brand new document.docx';
let path => string.split('').map(char => /(\s|\.)/.test(char) ? '/' : char).join('');
// "/var/www/site/Brand/new/document/docx";
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.