it-swarm.com.de

Regex, um mehrere Leerzeichen durch ein einzelnes Leerzeichen zu ersetzen

Gegeben eine Zeichenfolge wie: 

"Der Hund hat einen langen Schwanz und ist ROT!"

Welche Art von jQuery oder JavaScript-Magie kann verwendet werden, um Leerzeichen maximal auf ein Leerzeichen zu beschränken?

Tor: 

"Der Hund hat einen langen Schwanz und ist ROT!"
363
AnApprentice

Da Sie auch Registerkarten, Zeilenumbrüche usw. abdecken möchten, ersetzen Sie einfach \s\s+ durch ' '

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

Wenn Sie wirklich nur Leerzeichen (und damit keine Registerkarten, Zeilenumbrüche usw.) abdecken möchten, tun Sie dies:

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

Da Sie an Leistung interessiert zu sein scheinen, habe ich diese mit Firebug profiliert. Hier sind die Ergebnisse, die ich bekommen 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 in Firefox, wobei 100k Zeichenketten ersetzt werden.

Ich empfehle Ihnen, Ihre eigenen Profiltests mit Firebug durchzuführen, wenn Sie der Meinung sind, dass Leistung ein Problem ist. Menschen sind bekanntermaßen schlecht darin, vorherzusagen, wo die Engpässe in ihren Programmen liegen.

(Beachten Sie außerdem, dass in der Entwicklersymbolleiste von IE 8 auch ein Profiler integriert ist. Es lohnt sich möglicherweise, die Leistung im IE zu überprüfen.) 

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

EDIT: Wenn Sie alle Arten von Whitespace-Zeichen ersetzen möchten, ist der effizienteste Weg der folgende:

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

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

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

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

Edit : Dies ist wahrscheinlich besser, da es auf ein Leerzeichen gefolgt von einem 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 /\s+/ nicht selbst verwendet, da Leerzeichen ersetzt werden, die sich mehrmals auf 1 Zeichen erstrecken.

Ich habe keine dieser Tests eingehend getestet, also lmk, wenn es Fehler gibt.

Vergessen Sie nicht, die Variable/Eigenschaft erneut zu ersetzen, wenn Sie den String ersetzen möchten.

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

JQuery.prototype.text verwenden:

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

Ich habe diese Methode, ich nenne sie die Derp-Methode, da es keinen besseren Namen gibt.

while (str.indexOf("  ") !== -1) {
    str = str.replace(/  /g, " ");
}

Die Ausführung in JSPerf führt zu überraschenden Ergebnissen.

13
Nenotlep

Robuster:

funktion trimmen (Word) 
 {
 Word = Word.replace (/ [^\x21-\x7E] +/g, ''); // Nichtdruckzeichen in Leerzeichen umwandeln 
 return Word.replace (/ ^\s + |\s + $/g, ''); // Entferne führende/nachgestellte Leerzeichen 
} 
9
Chris

Eine robustere Methode: Dadurch werden auch die anfänglichen und nachgestellten Leerzeichen entfernt, falls vorhanden. Z.B:

// 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 !"

Ihr Beispiel hatte diese Leerzeichen nicht, aber es ist auch ein sehr häufiges Szenario, und die akzeptierte Antwort bestand darin, diese nur in einzelne Leerzeichen zu unterteilen, z. B. "The ... RED!", Was Sie normalerweise nicht benötigen.

9
Ethan

Ich schlage vor

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

nur für Räume 
ODER

string = string.replace(/(\s)+/g,"$1");

um aus mehreren Renditen auch eine einzige Rendite zu machen.

8
Leonard Meagher

Hier ist eine alternative Lösung, wenn Sie replace nicht verwenden möchten (Leerzeichen in einem String ersetzen, ohne Javascript zu verwenden.)

var str="The dog      has a long   tail, and it     is RED!";
var rule=/\s{1,}/g;
str = str.split(rule).join(" "); 
document.write(str);
6
imos

Ich weiß, dass ich zu spät zur Party komme, aber ich habe eine Lösung von Nizza entdeckt.

Hier ist es:

var myStr = myStr.replace(/[ ][ ]*/g, ' ');
5
ToXic73

Umfassende unverschlüsselte Antwort für Neulinge et al.

Dies ist für alle Dummies wie ich, die die Skripts testen, die von einigen von Ihnen geschrieben wurden, die nicht funktionieren.

Die folgenden 3 Beispiele sind die Schritte, die ich zum Entfernen von Sonderzeichen UND zusätzlichen Leerzeichen auf den folgenden 3 Websites durchgeführt habe (alle funktionieren einwandfrei) {1. EtaVisa.com 2. EtaStatus.com 3. Tikun.com} damit ich weiß, dass diese perfekt funktionieren.

Wir haben diese mit über 50 gleichzeitig verkettet und KEINE Probleme gemacht.

// Dies entfernt Sonderzeichen + 0-9 und erlaubt nur Buchstaben (Groß- und Kleinschreibung)

function NoDoublesPls1()
{
var str=document.getElementById("NoDoubles1");
var regex=/[^a-z]/gi;
str.value=str.value.replace(regex ,"");
}

// Dies entfernt Sonderzeichen und erlaubt nur Buchstaben (Groß- und Kleinschreibung) und 0-9 AND-Leerzeichen

function NoDoublesPls2()
{
var str=document.getElementById("NoDoubles2");
var regex=/[^a-z 0-9]/gi;
str.value=str.value.replace(regex ,"");
}

// Dies entfernt Sonderzeichen und erlaubt nur Buchstaben (Groß- und Kleinschreibung) und 0-9 AND-Leerzeichen// wenn ich einzelne Anführungszeichen verwendete, funktionierte es nicht.

function NoDoublesPls3()
{    var str=document.getElementById("NoDoubles3");
var regex=/[^a-z 0-9]/gi;
str.value=str.value.replace(regex ,"") .replace(/\s\s+/g, " ");
}

:: NEXT :: Speichern Sie # 3 als a .js // Ich habe meine NoDoubles.js aufgerufen

:: NEXT :: Fügen Sie Ihre JS in Ihre Seite ein

 <script language="JavaScript" src="js/NoDoubles.js"></script>

Fügen Sie dies in Ihr Formularfeld ein :: wie z 

<INPUT type="text" name="Name"
     onKeyUp="NoDoublesPls3()" onKeyDown="NoDoublesPls3()" id="NoDoubles3"/>

Damit es so aussieht

<INPUT type="text" name="Name" onKeyUp="NoDoublesPls3()" onKeyDown="NoDoublesPls3()" id="NoDoubles3"/>

Dadurch werden Sonderzeichen entfernt, einzelne Leerzeichen zugelassen und zusätzliche Leerzeichen entfernt.

5
PatFoster

Auch eine Möglichkeit:

str.replace( /\s+/g, ' ' )
4
rfunduk

Jquery hat eine trim () - Funktion, die im Grunde etwas wie "FOo Bar" in "FOo Bar" umwandelt.

var string = "  My     String with  Multiple lines    ";
string.trim(); // output "My String with Multiple lines"

Es ist viel nützlicher, da Leerzeichen am Anfang und am Ende von Zeichenfolgen automatisch entfernt werden. Kein Regex benötigt.

2
Eryk Wróbel

Wir können den folgenden Regex verwenden, der mit Hilfe des sed-Systembefehls erläutert wird. Der ähnliche Regex kann in anderen Sprachen und Plattformen verwendet werden.

Fügen Sie den Text einer Datei hinzu, sagen Sie test

manjeet-laptop:Desktop manjeet$ cat test
"The dog      has a long   tail, and it     is RED!"

Wir können den folgenden Regex verwenden, um alle Leerzeichen durch ein Leerzeichen zu ersetzen

manjeet-laptop:Desktop manjeet$ sed 's/ \{1,\}/ /g' test
"The dog has a long tail, and it is RED!"

Hoffe, das dient dem Zweck

0
minhas23

is replace wird nicht verwendet, string = string.split (/\W + /);

0
Lin

Versuchen Sie dies, um mehrere Leerzeichen durch ein einzelnes Leerzeichen zu ersetzen.

<script type="text/javascript">
    var myStr = "The dog      has a long   tail, and it     is RED!";
    alert(myStr);  // Output 'The dog      has a long   tail, and it     is RED!'

    var newStr = myStr.replace(/  +/g, ' ');
    alert(newStr);  // Output 'The dog has a long tail, and it is RED!'
</script>

Weiterlesen @ Mehrere Leerzeichen durch ein Leerzeichen ersetzen

0
jonathan klevin

Für mehr Kontrolle können Sie den Replacement Callback verwenden, um den Wert zu behandeln.

value = "tags:HUNT  tags:HUNT         tags:HUNT  tags:HUNT"
value.replace(new RegExp(`(?:\\s+)(?:tags)`, 'g'), $1 => ` ${$1.trim()}`)
//"tags:HUNT tags:HUNT tags:HUNT tags:HUNT"
0
jackotonye
var text = `xxx  df dfvdfv  df    
                     dfv`.split(/[\s,\t,\r,\n]+/).filter(x=>x).join(' ');

ergebnis:

"xxx df dfvdfv df dfv"
0
Toolkit

Dieses Skript entfernt alle Leerräume (mehrere Leerzeichen, Tabulatoren, Rückgaben usw.) zwischen Wörtern und Verkleidungen:

// Trims & replaces any wihtespacing to single space between words
String.prototype.clearExtraSpace = function(){
  var _trimLeft  = /^\s+/,
      _trimRight = /\s+$/,
      _multiple  = /\s+/g;

  return this.replace(_trimLeft, '').replace(_trimRight, '').replace(_multiple, ' ');
};
0
Oriol
var string = "The dog      has a long   tail, and it     is RED!";
var replaced = string.replace(/ +/g, " ");

Oder wenn Sie auch Tabulatoren ersetzen möchten:

var replaced = string.replace(/\s+/g, " ");
0
Brian Campbell
var myregexp = new RegExp(/ {2,}/g);

str = str.replace(myregexp,' ');
0
marvin