Jak usunąć spacje z ciągu za pomocą JavaScript?


552

Jak usunąć spacje w ciągu? Na przykład:

Wejście:

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

Wynik:

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

moje rozwiązanie" ahm ed ".split('').filter(e => e.trim().length).join('')
UA_

Odpowiedzi:


1223

To?

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

Przykład

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

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


Aktualizacja: Na podstawie tego pytania to:

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

jest lepszym rozwiązaniem. Daje ten sam wynik, ale robi to szybciej.

Regex

\sjest wyrażeniem regularnym dla „białych znaków” i gjest flagą „globalną”, co oznacza dopasowanie WSZYSTKIE \s(białe znaki).

Świetne wyjaśnienie +można znaleźć tutaj .

Na marginesie, możesz zamienić treść między pojedynczymi cudzysłowami na cokolwiek chcesz, więc możesz zastąpić białe znaki dowolnym innym ciągiem.


@Gaurav Szukałem podobnych odpowiedzi na SO i widzę .replace(/\s+/g, '')częściej. Czy jest jakaś różnica między tym a moją odpowiedzią?
Šime Vidas

w tym przypadku nie ma różnicy. Ale + służy do znajdowania co najmniej jednego wystąpienia.
Gaurav

1
Głupia ja, miałem wrażenie, że .replace(' ','')to zadziała. Bardzo mile widziane!
Andy Mercer

3
oryginalna odpowiedź z udziałem (do którego Sime jest powiązany w swoim +
wydaniu

2
Uważaj, aby przypadkiem nie zacytować wyrażenia regularnego, np. .replace('/\s+/g', '')Ponieważ będzie on próbował znaleźć ten dosłowny ciąg. To mnie potknęło przed ...
RTF

75

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

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

Dwa sposoby na zrobienie tego!


4
Podobał mi się split () i join ().
Eric Milliot-Martinez,

2
split ('') i join nie usuwają \ n, \ t białych znaków, innym obejściem jest a.split (''). map (c => c.trim ()). join ('')
rab

36

KRÓTKIE i NAJSZYBSZE :str.replace(/ /g, '');


Reper:

Oto moje wyniki - (2018.07.13) MacOs High Sierra 10.13.3 na Chrome 67.0.3396 (64-bit), Safari 11.0.3 (13604.5.6), Firefox 59.0.2 (64-bit)):

KRÓTKIE stringi

Krótki ciąg podobny do przykładów z pytania OP

wprowadź opis zdjęcia tutaj

Najszybszym rozwiązaniem we wszystkich przeglądarkach jest / /g(regexp1a) - Chrome 17,7 mln (operacja / s), Safari 10,1 mln, Firefox 8,8 mln. Najwolniejsze dla wszystkich przeglądarek było split-joinrozwiązanie. Zmiana do \slub dodać +lub ido regexp spowalnia przetwarzanie.

DŁUGIE sznurki

Dla ciągu około 3 miliony znaków to:

  • regexp1a : Safari 50.14 operacji / s, 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,

Możesz go uruchomić na swoim komputerze: https://jsperf.com/remove-string-spaces/1


1
Co ciekawe, metoda split-join jest teraz dla mnie najszybsza w Firefox 73, a następnie regexp1a o 53% wolniej.
hackel

25

Po odpowiedzi @rsplak: w rzeczywistości użycie podziału / łączenia jest szybsze niż użycie wyrażenia regularnego. Zobacz przypadek testu wydajności

Więc

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

działa szybciej niż

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

W przypadku małych tekstów nie ma to znaczenia, ale ważne jest w przypadkach, gdy czas jest ważny, np. W analizatorach tekstu, szczególnie podczas interakcji z użytkownikami.


Z drugiej strony \s+obsługuje szerszą gamę znaków spacji. Pośród \ni \t, dopasowuje również \u00a0znak, i to  jest odwracane, gdy dostaje się tekst textDomNode.nodeValue.

Myślę więc, że można tu wyciągnąć następujący wniosek: jeśli wystarczy wymienić spacje ' ' , użyj split / join. Jeśli mogą istnieć różne symbole klasy symboli - użyjreplace(/\s+/g, '')


1
to bardzo nie jest way faster . uruchomiłem test i jest tylko 2,19% szybszy, na moim Firefox 61.
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,"");

Uwaga: chociaż używasz „g” lub „gi” do usuwania spacji, oba zachowują się tak samo.

Jeśli użyjemy „g” w funkcji zamiany, sprawdzi ona dokładne dopasowanie. ale jeśli użyjemy „gi”, ignoruje to rozróżnianie wielkości liter.

w celach informacyjnych kliknij tutaj .


0

Regex + Zamień ()

Chociaż wyrażenie regularne może być wolniejsze, w wielu przypadkach programista manipuluje tylko kilkoma ciągami naraz, więc rozważenie szybkości nie ma znaczenia. Mimo że / / jest szybszy niż / \ s /, umieszczenie „\ s” wyjaśnia, co dzieje się z innym programistą, być może jaśniej.

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

Split () + Join ()

Użycie Split + Join pozwala na dalszą manipulację łańcuchem w łańcuchu.

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";
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.