1368 Stimmen

Zeichenkette in JavaScript trimmen?

Wie kann ich eine Zeichenkette in JavaScript kürzen? Das heißt, wie entferne ich alle Leerzeichen am Anfang und am Ende der Zeichenfolge in JavaScript?

296 Stimmen

Es ist erwähnenswert, dass zwei Jahre nachdem diese Frage gestellt wurde, String.trim() nativ in JavaScript 1.8.1 / ECMAScript 5 hinzugefügt wurde, unterstützt in: Firefox 3.5+, Chrome/Safari 5+, IE9+ (nur im Standardmodus!) siehe die Antwort von scunliffe: stackoverflow.com/a/8522376/8432

47 Stimmen

String.trim() funktioniert auch in Node.js ohne Probleme.

47 Stimmen

Um pingelig zu sein: String.trim() , die Klassenmethode, gibt es in ES5/Node.js nicht; stattdessen, String.prototype.trim() , die Instanzmethode, existiert. Verwendung: ' foo '.trim() pas String.trim(' foo ') .

1voto

Zesar Punkte 566

Ich habe eine Lib, die trim. so gelöst, indem Sie den folgenden Code verwendet.

String.prototype.trim = String.prototype.trim || function(){ return jQuery.trim(this); };

1 Stimmen

Dies ist keine gute Lösung. Betrachten Sie den Fall, wo zwei Instanzen von jQuery geladen werden (ein häufiges Szenario mit Tags). Wenn die 2. Instanz von jQuery geladen wird, setzt sie ihre .trim() Methode gleich der nativen String.prototype.trim die bereits auf return jQuery.trim(this) und erzeugt damit einen Stapelüberlauf.

0voto

Joseph Lennox Punkte 3072

Hier ist es in TypeScript:

var trim: (input: string) => string = String.prototype.trim
    ? ((input: string) : string => {
        return (input || "").trim();
    })
    : ((input: string) : string => {
        return (input || "").replace(/^\s+|\s+$/g,"");
    })

Es wird auf die Regex zurückgreifen, wenn der native Prototyp nicht verfügbar ist.

0voto

plavozont Punkte 779

Ich weiß nicht, welche Wanzen sich hier verstecken können, aber ich benutze das hier:

var some_string_with_extra_spaces="   goes here    "
console.log(some_string_with_extra_spaces.match(/\S.*\S|\S/)[0])

Oder so, wenn der Text Eingaben enthält:

console.log(some_string_with_extra_spaces.match(/\S[\s\S]*\S|\S/)[0])

Ein weiterer Versuch:

console.log(some_string_with_extra_spaces.match(/^\s*(.*?)\s*$/)[1])

0 Stimmen

Diese Technik ist gefährlich, wenn der Text Zeilenumbrüche enthalten kann. Sie schneidet die Zeichenkette ab. Es gibt bessere / zuverlässigere Techniken als diese. "one two\r\nthree".match(/\S.*\S|\S/)[0] erbringt: "one two"

-4voto

rektide Punkte 1124

Mine verwendet einen einzigen Regex, um nach Fällen zu suchen, in denen das Trimmen erforderlich ist, und verwendet die Ergebnisse dieses Regex, um die gewünschten Teilstring-Grenzen zu bestimmen:

var illmatch= /^(\s*)(?:.*?)(\s*)$/
function strip(me){
    var match= illmatch.exec(me)
    if(match && (match[1].length || match[2].length)){
        me= me.substring(match[1].length, p.length-match[2].length)
    }
    return me
}

Die einzige Design-Entscheidung, die hier getroffen wurde, war die Verwendung einer Teilzeichenkette, um die endgültige Erfassung durchzuführen. s/\?:// (der mittlere Begriff wird erfasst) und das Ersatzfragment wird:

    if(match && (match[1].length || match[3].length)){
        me= match[2]
    }

Ich habe bei diesen Feebolden zwei Leistungswetten abgeschlossen:

  1. Kopiert die Substring-Implementierung die Daten der ursprünglichen Zeichenfolge? Wenn ja, in der ersten, wenn eine Zeichenfolge getrimmt werden muss, gibt es eine doppelte Traversal, zuerst in der Regex (die hoffentlich teilweise sein kann), und zweitens in der Substring-Extraktion. hoffentlich eine Substring-Implementierung verweist nur auf die ursprüngliche Zeichenfolge, so dass Operationen wie Substring fast frei sein kann. Daumen drücken

  2. Wie gut ist die Erfassung in der Regex-Implikation? der mittlere Term, der Ausgabewert, könnte potenziell sehr lang sein. ich war nicht bereit, darauf zu vertrauen, dass die Erfassung aller Regex-Implikatoren bei einer Eingabeerfassung von mehreren hundert KB nicht ins Stocken gerät, aber ich habe es auch nicht getestet (zu viele Laufzeiten, tut mir leid!). die zweite führt IMMER eine Erfassung durch; wenn Ihr Motor dies tun kann, ohne einen Treffer zu erleiden, vielleicht unter Verwendung einiger der oben genannten String-Seilzug-Techniken, dann verwenden Sie es auf jeden Fall!

-7voto

Codler Punkte 10349

Für IE9+ und andere Browser

function trim(text) {
    return (text == null) ? '' : ''.trim.call(text);
}

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