801 Stimmen

Wie entfernt man mit JavaScript Leerzeichen aus einer Zeichenkette?

Wie entfernt man Leerzeichen in einer Zeichenkette? Zum Beispiel:

Eingabe:

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

Ausgabe:

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

1737voto

Šime Vidas Punkte 172810

Das hier?

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

Ejemplo

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

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

Aktualisierung: Basierend auf diese Frage , dies:

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

ist eine bessere Lösung. Sie führt zu demselben Ergebnis, aber schneller.

Der Regex

\s ist die Regex für "Leerzeichen", und g ist das "globale" Flag, d.h. es gilt für ALLE \s (Whitespaces).

Eine gute Erklärung für + kann gefunden werden aquí .

Nebenbei bemerkt können Sie den Inhalt zwischen den einfachen Anführungszeichen durch eine beliebige Zeichenkette ersetzen, d. h. Sie können Leerzeichen durch eine beliebige andere Zeichenkette ersetzen.

119voto

Kamil Kiełczewski Punkte 69048

KÜRZEST und SCHNELLST : 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) ):

SHORT-Strings

Kurze Zeichenfolge ähnlich den Beispielen aus der OP-Frage

enter image description here

Die schnellste Lösung auf allen Browsern ist / /g (regexp1a) - Chrome 17.7M (Operation/Sek), Safari 10.1M, Firefox 8.8M. Am langsamsten war bei allen Browsern split-join Lösung. Ändern Sie a \s oder hinzufügen + o i zu regexp verlangsamt die Verarbeitung.

LONG-Strings

Für eine Zeichenkette mit ca. 3 Millionen Zeichen ergibt sich folgendes Bild:

  • regexp1a : Safari 50,14 ops/sec, Firefox 18,57, Chrome 8,95
  • regexp2b : Safari 38.39, Firefox 19.45, Chrome 9.26
  • Split-Joint : Firefox 26.41, Safari 23.10, Chrome 7.98,

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

114voto

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!

37voto

Minstel Punkte 536

Nach der Antwort von @rsplak: Tatsächlich ist die Verwendung von Split/Join schneller als die Verwendung von Regexp. Siehe die Leistung Testfall

Also

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 die Zeit wichtig ist, z. B. bei Textanalysten, insbesondere bei der Interaktion mit Benutzern, ist dies von Bedeutung.


Andererseits, \s+ verarbeitet eine größere Vielfalt von Leerzeichen. Unter mit \n y \t entspricht sie auch \u00a0 Charakter, und das ist es, was   eingeschaltet ist, wird beim Abrufen von Text mit textDomNode.nodeValue .

Ich denke also, dass die Schlussfolgerung hier wie folgt lauten kann: Wenn Sie nur die Räume ' ' verwenden Sie split/join. Wenn es verschiedene Symbole von Symbolklasse - Verwendung replace(/\s+/g, '')

21voto

Mrkouhadi Punkte 328

Sie verwenden auch eine der neuesten String-Methoden von JS: replaceAll

'/var/www/site/Brand new document.docx'.replaceAll(' ', '');

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X