Ich habe Zeichenfolgen mit zusätzlichen Leerzeichen. Jedes Mal, wenn es mehr als nur ein Leerzeichen gibt, möchte ich, dass es nur eines ist.
Jemand? Ich habe versucht, Google zu durchsuchen, aber nichts hat bei mir funktioniert.
Vielen Dank
Ich habe Zeichenfolgen mit zusätzlichen Leerzeichen. Jedes Mal, wenn es mehr als nur ein Leerzeichen gibt, möchte ich, dass es nur eines ist.
Jemand? Ich habe versucht, Google zu durchsuchen, aber nichts hat bei mir funktioniert.
Vielen Dank
Antworten:
Etwas wie das:
var s = " a b c ";
console.log(
s.replace(/\s+/g, ' ')
)
Sie können String erweitern, um diese Verhaltensweisen als Methoden zu implementieren, wie in:
String.prototype.killWhiteSpace = function() {
return this.replace(/\s/g, '');
};
String.prototype.reduceWhiteSpace = function() {
return this.replace(/\s+/g, ' ');
};
Auf diese Weise können Sie jetzt die folgenden eleganten Formen verwenden, um die gewünschten Zeichenfolgen zu erstellen:
"Get rid of my whitespaces.".killWhiteSpace();
"Get rid of my extra whitespaces".reduceWhiteSpace();
Die Verwendung eines regulären Ausdrucks mit der Ersetzungsfunktion führt den Trick aus:
string.replace(/\s/g, "")
var s = ' a b word word. word, wordword word ';
// with ES5:
s = s.split(' ').filter(function(n){ return n != '' }).join(' ');
console.log(s); // "a b word word. word, wordword word"
// or ES6:
s = s.split(' ').filter(n => n).join(' ');
console.log(s); // "a b word word. word, wordword word"
Es teilt die Zeichenfolge durch Leerzeichen auf , entfernt alle leeren Array-Elemente aus dem Array (diejenigen, die mehr als ein einzelnes Leerzeichen waren) und fügt alle Wörter erneut zu einer Zeichenfolge mit einem einzelnen Leerzeichen dazwischen zusammen.
Ich nehme an, Sie möchten Leerzeichen vom Anfang und / oder Ende der Zeichenfolge entfernen (anstatt alle Leerzeichen zu entfernen ?
In diesem Fall benötigen Sie einen regulären Ausdruck wie folgt:
mystring = mystring.replace(/(^\s+|\s+$)/g,' ');
Dadurch werden alle Leerzeichen am Anfang oder Ende der Zeichenfolge entfernt. Wenn Sie nur Leerzeichen vom Ende abschneiden möchten, sieht der reguläre Ausdruck stattdessen folgendermaßen aus:
mystring = mystring.replace(/\s+$/g,' ');
Hoffentlich hilft das.
''
anstelle von sein ' '
.
jQuery.trim () funktioniert gut.
Ich weiß, dass ich zu einem Thema keine Nekromantie haben sollte, aber angesichts der Details der Frage erweitere ich sie normalerweise auf:
Dafür verwende ich Code wie diesen (die Klammern auf dem ersten regulären Ausdruck sind nur da, um den Code ein bisschen lesbarer zu machen ... reguläre Ausdrücke können schmerzhaft sein, wenn Sie nicht mit ihnen vertraut sind):
s = s.replace(/^(\s*)|(\s*)$/g, '').replace(/\s+/g, ' ');
Der Grund dafür ist, dass die Methoden für das String-Objekt ein String-Objekt zurückgeben, für das Sie eine andere Methode aufrufen können (genau wie jQuery und einige andere Bibliotheken). Viel kompaktere Codierungsmethode, wenn Sie mehrere Methoden nacheinander für ein einzelnes Objekt ausführen möchten.
var x = "Test Test Test" .split ("") .join (""); Alarm (x);
Versuche dies.
var string = " string 1";
string = string.trim().replace(/\s+/g, ' ');
das Ergebnis wird sein
string 1
Was hier passiert ist, ist, dass es die Außenräume zuerst mit und trim()
dann die Innenräume mit trimmt .replace(/\s+/g, ' ')
.
Wenn Sie den Benutzer einschränken möchten, Leerzeichen im Namen anzugeben, erstellen Sie einfach eine if-Anweisung und geben Sie die Bedingung an. wie ich es getan habe:
$j('#fragment_key').bind({
keypress: function(e){
var key = e.keyCode;
var character = String.fromCharCode(key);
if(character.match( /[' ']/)) {
alert("Blank space is not allowed in the Name");
return false;
}
}
});
Wie wäre es mit diesem?
"my test string \t\t with crazy stuff is cool ".replace(/\s{2,9999}|\t/g, ' ')
Ausgänge "my test string with crazy stuff is cool "
Dieser wird auch alle Tabs los
\s
. Unnötig komplexer Regex, könnte genauso gut einfach schreiben /\s+/g
.