777 Stimmen

Regex zum Ersetzen mehrerer Leerzeichen durch ein einzelnes Leerzeichen

Gegeben eine Zeichenfolge wie:

"The dog      has a long   tail, and it     is RED!"

Welche Art von jQuery oder JavaScript Magie kann verwendet werden, um Leerzeichen zu halten, um nur ein Leerzeichen max?

Das Ziel:

"The dog has a long tail, and it is RED!"

1376voto

BalusC Punkte 1034465

Da Sie auch Tabulatoren, Zeilenumbrüche usw. abdecken wollen, ersetzen Sie einfach \s\s+ con ' ' :

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

Wenn Sie wirklich nur Leerzeichen (und damit keine Tabulatoren, Zeilenumbrüche usw.) abdecken wollen, tun Sie dies:

string = string.replace(/  +/g, ' ');

241voto

Edward Loper Punkte 14349

Da Sie anscheinend an der Leistung interessiert sind, habe ich diese mit Firebug profiliert. Hier sind die Ergebnisse, die ich erhalten habe:

str.replace( /  +/g, ' ' )       ->  380ms
str.replace( /\s\s+/g, ' ' )     ->  390ms
str.replace( / {2,}/g, ' ' )     ->  470ms
str.replace( / +/g, ' ' )        ->  790ms
str.replace( / +(?= )/g, ' ')    -> 3250ms

Dies ist auf Firefox, mit 100k Zeichenfolgen-Ersetzungen.

Ich möchte Sie ermutigen, Ihre eigenen Profiltests mit Firebug durchzuführen, wenn Sie glauben, dass die Leistung ein Problem darstellt. Menschen sind notorisch schlecht darin, vorherzusagen, wo die Engpässe in ihren Programmen liegen.

(Beachten Sie auch, dass die Entwickler-Symbolleiste des IE 8 ebenfalls einen Profiler enthält - es könnte sich lohnen, die Leistung des IE zu überprüfen).

56voto

watain Punkte 4388
var str = "The      dog        has a long tail,      and it is RED!";
str = str.replace(/ {2,}/g,' ');

EDIT。 Wenn Sie alle Arten von Leerzeichen ersetzen möchten, ist dies der effizienteste Weg:

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

18voto

Ethan Punkte 4717

Eine robustere Methode: Diese Methode sorgt für également das Entfernen der Leerzeichen am Anfang und am Ende, falls vorhanden. Beispiel:

// NOTE the possible initial and trailing spaces
var str = "  The dog      has a long   tail, and it     is RED!  "

str = str.replace(/^\s+|\s+$|\s+(?=\s)/g, "");

// str -> "The dog has a long tail, and it is RED !"

In Ihrem Beispiel fehlten diese Leerzeichen, aber sie sind auch ein sehr häufiges Szenario, und die akzeptierte Antwort war, sie nur in einzelne Leerzeichen zu zerlegen, z. B.: "Die ... ROT! ", was Sie in der Regel nicht brauchen.

17voto

meder omuraliev Punkte 177513

Dies ist eine Lösung, die allerdings auf alle Leerzeichen:

"The      dog        has a long tail,      and it is RED!".replace(/\s\s+/g, ' ')

"The dog has a long tail, and it is RED!"

Editar : Dies ist wahrscheinlich besser, da es auf ein Leerzeichen, gefolgt von 1 oder mehreren Leerzeichen, abzielt:

"The      dog        has a long tail,      and it is RED!".replace(/  +/g, ' ')

"The dog has a long tail, and it is RED!"

Alternative Methode:

"The      dog        has a long tail,      and it is RED!".replace(/ {2,}/g, ' ')
"The dog has a long tail, and it is RED!"

Ich habe nicht verwendet /\s+/ selbst, da dies Leerzeichen ersetzt, die sich mehrfach über ein Zeichen erstrecken, und möglicherweise weniger effizient ist, da es mehr als nötig anvisiert.

Ich habe nicht tief testen einige von ihnen so lmk, wenn es Bugs sind.

Denken Sie bei der Ersetzung von Zeichenketten auch daran, die Variable/Eigenschaft ihrer eigenen Ersetzung neu zuzuweisen, z. B:

var string = 'foo'
string = string.replace('foo', '')

Verwendung von jQuery.prototype.text:

var el = $('span:eq(0)');
el.text( el.text().replace(/\d+/, '') )

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