Gegeben eine Zeichenfolge wie:
"Der Hund hat einen langen Schwanz und er ist ROT!"
Welche Art von jQuery- oder JavaScript-Magie kann verwendet werden, um Leerzeichen auf maximal ein Leerzeichen zu beschränken?
Tor:
"Der Hund hat einen langen Schwanz und er ist ROT!"
javascript
jquery
regex
Ein Lehrling
quelle
quelle
str.replace(/ +(?= )/g,'');
Sie ersetzen nichts, was Sie nicht müssen.Antworten:
Vorausgesetzt , dass Sie auch auf Abdecklaschen wollen, Zeilenumbrüche, etc., ersetzen Sie einfach
\s\s+
mit' '
:Wenn Sie wirklich nur Leerzeichen (und damit keine Tabulatoren, Zeilenumbrüche usw.) abdecken möchten, gehen Sie folgendermaßen vor:
quelle
function removeExtraSpaces(string){ return string.replace(/\s{2,}/g, ' ');}
trim()
. Es ist schneller als Regex. Du könntest es einfach tunstring.trim().replace(/\s\s+/g, ' ');
oderstring.replace(/\s\s+/g, ' ').trim();
./\s\s+/g
und/\s{2,}/g
stimmen nicht mit Leerzeichen überein, es sei denn, es sind mindestens zwei nebeneinander, z. B. stimmt mit \ t \ t überein, stimmt jedoch nicht mit einzelnen \ t überein.string.replace(/\s+/g, ' ')
wird mit allen einzelnen und mehreren Leerzeichen-Teilzeichenfolgen übereinstimmen und durch ein einzelnes Leerzeichen ersetzt.Da Sie an Leistung interessiert zu sein scheinen, habe ich diese mit Firebug profiliert. Hier sind die Ergebnisse, die ich erhalten habe:
Dies ist in Firefox der Fall, wo 100.000 Zeichenfolgen ersetzt werden.
Ich empfehle Ihnen, Ihre eigenen Profiling-Tests mit Firebug durchzuführen, wenn Sie der Meinung sind, dass die Leistung ein Problem darstellt. Menschen sind notorisch schlecht darin, vorherzusagen, wo die Engpässe in ihren Programmen liegen.
(Beachten Sie außerdem, dass in der Entwickler-Symbolleiste von IE 8 auch ein Profiler integriert ist. Es kann sich lohnen, die Leistung im IE zu überprüfen.)
quelle
( / +(?= )/g, ' ');
schlägt in IE9 fehl, es"Foo Bar Baz".replace(/ +(?= )/g, ' ');
"Foo Bar Baz"
BEARBEITEN: Wenn Sie alle Arten von Leerzeichen ersetzen möchten, wäre der effizienteste Weg wie folgt:
quelle
Dies ist eine Lösung, die jedoch auf alle Leerzeichen abzielt:
Bearbeiten : Dies ist wahrscheinlich besser, da es auf ein Leerzeichen abzielt, gefolgt von einem oder mehreren Leerzeichen:
Alternative Methode:
Ich habe es nicht
/\s+/
alleine verwendet, da dies Leerzeichen ersetzt, die 1 Zeichen mehrmals umfassen und möglicherweise weniger effizient sind, da es mehr als nötig als Ziel hat.Ich habe keines davon gründlich getestet, um festzustellen, ob es Fehler gibt.
Wenn Sie Zeichenfolgen ersetzen möchten, müssen Sie die Variable / Eigenschaft auch ihrer eigenen Ersetzung zuweisen, z.
Verwenden von jQuery.prototype.text:
quelle
Ich habe diese Methode, ich nenne sie die Derp-Methode, weil ich keinen besseren Namen habe.
Das Ausführen in JSPerf liefert einige überraschende Ergebnisse.
quelle
Eine robustere Methode: Dadurch wird auch sichergestellt, dass auch die anfänglichen und nachfolgenden Leerzeichen entfernt werden, falls vorhanden. Z.B:
Ihr Beispiel hatte diese Leerzeichen nicht, aber sie sind auch ein sehr häufiges Szenario, und die akzeptierte Antwort bestand darin, diese nur in einzelne Leerzeichen zu zerlegen, z. B. "The ... RED!", Was normalerweise nicht erforderlich ist.
quelle
Robuster:
quelle
Ich schlage vor
für nur Leerzeichen
ODER
um auch mehrere Retouren in eine einzige zu verwandeln.
quelle
Ich weiß, dass ich zu spät zur Party komme, aber ich habe eine schöne Lösung gefunden.
Hier ist es:
quelle
Hier ist eine alternative Lösung, wenn Sie nicht ersetzen möchten (ersetzen Sie Leerzeichen in einer Zeichenfolge, ohne Javascript zu ersetzen).
quelle
Umfassende unverschlüsselte Antwort für Neulinge et al.
Dies ist für alle Dummies wie mich, die die Skripte testen, die von einigen von euch geschrieben wurden, die nicht funktionieren.
Die folgenden 3 Beispiele sind die Schritte, die ich unternommen habe, um Sonderzeichen UND zusätzliche Leerzeichen auf den folgenden 3 Websites zu entfernen (die alle perfekt funktionieren) {1. EtaVisa.com 2. EtaStatus.com 3. Tikun.com}, damit ich weiß, dass diese perfekt funktionieren.
Wir haben diese zusammen mit über 50 gleichzeitig und ohne Probleme verkettet.
// Dies entfernte Sonderzeichen + 0-9 und erlaubt nur Buchstaben (Groß- und Kleinschreibung)
// Dies entfernt Sonderzeichen und erlaubt nur Buchstaben (Groß- und Kleinschreibung) und 0-9 UND-Leerzeichen
// Dies entfernt Sonderzeichen und erlaubt nur Buchstaben (Groß- und Kleinbuchstaben) und 0-9 UND-Leerzeichen // Die .replace (/ \ s \ s + / g, "") am Ende entfernt überschüssige Leerzeichen // wenn ich verwendete einfache Anführungszeichen, es hat nicht funktioniert.
:: NEXT :: Speichern Sie # 3 als
a .js
// Ich habe meine NoDoubles.js aufgerufen:: NEXT :: Fügen Sie Ihre JS in Ihre Seite ein
Fügen Sie dies in Ihr Formularfeld ein :: wie z
Damit es so aussieht
Dadurch werden Sonderzeichen entfernt, einzelne Leerzeichen zugelassen und zusätzliche Leerzeichen entfernt.
quelle
Auch eine Möglichkeit:
quelle
Oder wenn Sie auch Registerkarten ersetzen möchten:
quelle
Jquery hat die Funktion trim (), die so etwas wie diese "FOo Bar" in "FOo Bar" verwandelt.
Dies ist viel nützlicher, da Leerzeichen am Anfang und am Ende der Zeichenfolge automatisch entfernt werden. Keine Regex erforderlich.
quelle
is replace wird nicht verwendet, string = string.split (/ \ W + /);
quelle
quelle
Wir können den folgenden regulären Ausdruck verwenden, der mit Hilfe des Befehls sed system erklärt wurde. Der ähnliche reguläre Ausdruck kann in anderen Sprachen und Plattformen verwendet werden.
Fügen Sie den Text in eine Datei ein, z. B. Test
Wir können den folgenden regulären Ausdruck verwenden, um alle Leerzeichen durch einzelne Leerzeichen zu ersetzen
Hoffe das dient dem Zweck
quelle
Versuchen Sie dies, um mehrere Leerzeichen durch ein einzelnes Leerzeichen zu ersetzen.
Lesen Sie mehr @ Ersetzen mehrerer Leerzeichen durch ein einzelnes Leerzeichen
quelle
Ergebnis:
quelle
Für mehr Kontrolle können Sie den Ersetzungsrückruf verwenden, um den Wert zu verarbeiten.
quelle
Dieses Skript entfernt Leerzeichen (mehrere Leerzeichen, Tabulatoren, Rückgaben usw.) zwischen Wörtern und Trimms:
quelle
'Mauszeiger berühren' .replace (/ ^ \ s + | \ s + $ | (\ s) + / g, "$ 1") sollte den Trick machen!
quelle
Ich weiß, dass wir Regex verwenden müssen, aber während eines Interviews wurde ich gebeten, dies ohne Verwendung von REGEX zu tun.
@slightlytyler hat mir geholfen, mit dem folgenden Ansatz zu kommen.
quelle