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!"
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, ' ');
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.)
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,' ');
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+/, '') )
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.
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 }
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.
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.
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);
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, ' ');
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.
Auch eine Möglichkeit:
str.replace( /\s+/g, ' ' )
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.
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
is replace wird nicht verwendet, string = string.split (/\W + /);
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
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"
var text = `xxx df dfvdfv df
dfv`.split(/[\s,\t,\r,\n]+/).filter(x=>x).join(' ');
ergebnis:
"xxx df dfvdfv df dfv"
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, ' ');
};
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, " ");
var myregexp = new RegExp(/ {2,}/g);
str = str.replace(myregexp,' ');