Wie entferne ich Leerzeichen aus einer Zeichenfolge mit JavaScript?

552

Wie entferne ich Leerzeichen in einer Zeichenfolge? Zum Beispiel:

Eingang:

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

Ausgabe:

'/var/www/site/Brandnewdocument.docx'
JLuiz
quelle
meine Lösung" ahm ed ".split('').filter(e => e.trim().length).join('')
UA_

Antworten:

1224

Diese?

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

Beispiel

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

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


Update: Basierend auf dieser Frage :

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

ist eine bessere Lösung. Es erzeugt das gleiche Ergebnis, aber es macht es schneller.

Der Regex

\sist der reguläre Ausdruck für "Leerzeichen" und gdas "globale" Flag, was "Übereinstimmung ALL" \s(Leerzeichen) bedeutet.

Eine gute Erklärung dafür +finden Sie hier .

Als Randnotiz können Sie den Inhalt zwischen den einfachen Anführungszeichen durch alles ersetzen, was Sie möchten, sodass Sie Leerzeichen durch eine andere Zeichenfolge ersetzen können.

Šime Vidas
quelle
@Gaurav Ich habe ähnliche Antworten auf SO nachgeschlagen und sehe .replace(/\s+/g, '')sie öfter. Gibt es einen Unterschied zwischen dem und meiner Antwort?
Šime Vidas
In diesem Fall gibt es keinen Unterschied. Aber + wird verwendet, um mindestens ein Vorkommen zu finden.
Gaurav
1
Dumm von mir, ich hatte den Eindruck, dass .replace(' ','')das funktionieren würde. Sehr geschätzt!
Andy Mercer
3
Die ursprüngliche Antwort (die Sime in seiner Bearbeitung verlinkt +hat ) hat nur 60 Stimmen, wenn jemand ihn / sie auch gutschreiben
Mousey
2
Achten .replace('/\s+/g', '')Sie darauf, dass Sie Ihren regulären Ausdruck nicht versehentlich zitieren, z. B. weil er versucht, diese wörtliche Zeichenfolge zu finden. Dies stolperte mich vor ...
RTF
75

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

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

Zwei Möglichkeiten, dies zu tun!

rsplak
quelle
4
Ich mochte split () und join ().
Eric Milliot-Martinez
2
split ('') und join entfernen nicht \ n, \ t Leerzeichen, eine andere Problemumgehung ist a.split (''). map (c => c.trim ()). join ('')
rab
36

KURZES und SCHNELLSTES :str.replace(/ /g, '');


Benchmark:

Hier meine Ergebnisse - (2018.07.13) MacOs High Sierra 10.13.3 auf Chrome 67.0.3396 (64-Bit), Safari 11.0.3 (13604.5.6), Firefox 59.0.2 (64-Bit)):

KURZE Saiten

Kurze Zeichenfolge ähnlich den Beispielen aus der OP-Frage

Geben Sie hier die Bildbeschreibung ein

Die schnellste Lösung für alle Browser ist / /g(regexp1a) - Chrome 17.7M (Betrieb / Sek.), Safari 10.1M, Firefox 8.8M. Das langsamste für alle Browser war die split-joinLösung. Ändern zu \soder Hinzufügen +oder izu Regexp verlangsamt die Verarbeitung.

Lange Saiten

Für Zeichenfolgen mit ca. 3 Millionen Zeichen sind die Ergebnisse:

  • regexp1a : Safari 50,14 ops / 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,

Sie können es auf Ihrem Computer ausführen: https://jsperf.com/remove-string-spaces/1

Kamil Kiełczewski
quelle
1
Interessanterweise ist die Split-Join-Methode für mich unter Firefox 73 jetzt die schnellste, gefolgt von regexp1a mit 53% langsamer.
Hackel
25

Folgende Antwort von @rsplak: Tatsächlich ist die Verwendung von Split / Join schneller als die Verwendung von regulärem Ausdruck. Sehen Sie sich die Leistung Testfall

Damit

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

arbeitet schneller als

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

Bei kleinen Texten ist dies nicht relevant, aber in Fällen, in denen Zeit wichtig ist, z. B. bei Textanalysatoren, insbesondere bei der Interaktion mit Benutzern, ist dies wichtig.


Behandelt andererseits eine \s+größere Vielfalt von Leerzeichen. Unter mit \nund \tstimmt es auch mit dem \u00a0Zeichen überein , und genau das  wird beim Abrufen von Text verwendet textDomNode.nodeValue.

Ich denke, dass die Schlussfolgerung hier wie folgt gezogen werden kann: Wenn Sie nur Leerzeichen ersetzen müssen ' ', verwenden Sie split / join. Wenn es verschiedene Symbole der Symbolklasse geben kann - verwenden Siereplace(/\s+/g, '')

Minstel
quelle
1
es ist sehr viel nicht way faster . lief den Test und es ist nur 2,19% schneller, auf meinem 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,"");

Hinweis: Obwohl Sie zum Entfernen von Leerzeichen 'g' oder 'gi' verwenden, verhalten sich beide gleich.

Wenn wir in der Ersetzungsfunktion 'g' verwenden, wird die genaue Übereinstimmung überprüft. Wenn wir jedoch 'gi' verwenden, wird die Groß- und Kleinschreibung ignoriert.

Als Referenz klicken Sie hier .

Raveendra007
quelle
0

Regex + Ersetzen ()

Obwohl Regex langsamer sein kann, manipuliert der Entwickler in vielen Anwendungsfällen nur wenige Zeichenfolgen gleichzeitig, sodass die Berücksichtigung der Geschwindigkeit keine Rolle spielt. Obwohl / / schneller als / \ s / ist, erklärt das '\ s', was einem anderen Entwickler vielleicht klarer vor sich geht.

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

Split () + Join ()

Die Verwendung von Split + Join ermöglicht eine weitere verkettete Manipulation der Zeichenfolge.

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";
SoEzPz
quelle