it-swarm.com.de

JavaScript: Wie verwende ich einen regulären Ausdruck, um Leerzeilen aus einem String zu entfernen?

Ich muss JavaScript verwenden, um leere Zeilen in einem HTML-Textfeld zu entfernen. Die Leerzeilen können sich an einer beliebigen Stelle im textarea -Element befinden. Eine Leerzeile kann nur ein Return oder Leerzeichen plus Return sein.

Ich erwarte eine Lösung für reguläre Ausdrücke. Hier sind einige, die ich ausprobiert habe, aber die funktionieren nicht und können nicht herausfinden, warum:

/^\s*\r?\n/g   

/^\s*\r?\n$/g

Edit 1

Es scheint, dass die von Aaronman und M. Buettner vorgeschlagene Lösung (ich habe sie ein wenig modifiziert) funktioniert:

string.replace(/^\s*\n/gm, "") 

Kann jemand sagen, warum mein erster regulärer Ausdruck nicht funktioniert?

Edit 2

Nachdem ich alle nützlichen Antworten gelesen hatte, kam ich auf Folgendes:

/^[\s\t]*(\r\n|\n|\r)/gm

Wird dies eine sein, die alle Situationen abdeckt?

Edit

Dies ist die übersichtlichste Version, die alle Bereiche (Leerzeichen, Tabulatoren) und Plattformen (Linux, Windows, Mac) abdeckt.

/^\s*[\r\n]/gm

Vielen Dank an m.buettner!

44
curious1

Ihr Muster scheint in Ordnung zu sein, Sie müssen nur den mehrzeiligen Modifikator m einfügen, damit ^ Und $ Auch mit den Zeilenanfängen und -enden übereinstimmen:

/^\s*\n/gm

Ohne m stimmen die Anker nur mit Zeichenfolgenanfang und -ende überein.

Beachten Sie, dass Sie die Zeilenenden des Mac nicht kennen (nur \r). Dies würde in diesem Fall helfen:

/^\s*[\r\n]/gm

Beachten Sie auch, dass Sie (in beiden Fällen) das optionale \r Vor dem \n Nicht explizit abgleichen müssen, da dies durch \s* Erledigt wird.

Wie Dex in einem Kommentar betont hat, wird dadurch die letzte Zeile nicht gelöscht, wenn sie nur aus Leerzeichen besteht (und keine neue Zeile folgt). Eine Möglichkeit, dies zu beheben, besteht darin, den aktuellen Zeilenumbruch optional zu machen und einen Zeilenende-Anker davor einzufügen. In diesem Fall müssen Sie do die Zeilenenden korrekt zuordnen:

/^\s*$(?:\r\n?|\n)/gm
68
Martin Ender

Ich glaube das wird funktionieren

searchText.replace(/(^[ \t]*\n)/gm, "")
17
aaronman

Das sollte der Trick sein, den ich denke:

var el = document.getElementsByName("nameOfTextBox")[0];
el.value.replace(/(\r\n|\n|\r)/gm, "");

EDIT: Entfernt drei Arten von Zeilenumbrüchen.

5
Bjørn Bråthen