Odpowiedzi:
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
\s
jest wyrażeniem regularnym dla „białych znaków” i g
jest 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.
.replace(/\s+/g, '')
częściej. Czy jest jakaś różnica między tym a moją odpowiedzią?
.replace(' ','')
to zadziała. Bardzo mile widziane!
.replace('/\s+/g', '')
Ponieważ będzie on próbował znaleźć ten dosłowny ciąg. To mnie potknęło przed ...
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!
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ótki ciąg podobny do przykładów z pytania OP
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-join
rozwiązanie. Zmiana do
\s
lub dodać +
lub i
do regexp spowalnia przetwarzanie.
Dla ciągu około 3 miliony znaków to:
Możesz go uruchomić na swoim komputerze: https://jsperf.com/remove-string-spaces/1
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 \n
i \t
, dopasowuje również \u00a0
znak, 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, '')
way faster
. uruchomiłem test i jest tylko 2,19% szybszy, na moim Firefox 61.
var input = '/var/www/site/Brand new document.docx';
//remove space
input = input.replace(/\s/g, '');
//make string lower
input = input.toLowerCase();
alert(input);
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 .
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";
" ahm ed ".split('').filter(e => e.trim().length).join('')