660 Stimmen

So entfernen Sie alle Zeilenumbrüche aus einer Zeichenkette

Ich habe einen Text in einer Textarea und lese ihn mit dem Attribut .value aus.

Jetzt möchte ich alle Zeilenumbrüche entfernen (das Zeichen, das entsteht, wenn Sie die Taste Enter ) aus meinem Text zu entfernen, indem ich .replace mit einem regulären Ausdruck verwende, aber wie gebe ich einen Zeilenumbruch in einer Regex an?

Wenn das nicht möglich ist, gibt es eine andere Möglichkeit?

0 Stimmen

792voto

Eremite Punkte 7625

Wie man einen Zeilenumbruch findet, ist von Betriebssystem zu Betriebssystem unterschiedlich. Bei Windows wäre das \r\n , aber Linux verwendet einfach \n und Apple verwendet \r .

Ich fand dies in JavaScript-Zeilenumbrüche :

someText = someText.replace(/(\r\n|\n|\r)/gm, "");

Das sollte alle Arten von Zeilenumbrüchen entfernen.

43 Stimmen

Warum ist die getrennte \r\n y \n y \r besser als nur /[\n\r]/g ? Sicherlich ist dies langsamer als es sein sollte, da jedes Zeichen nur mit den zwei möglichen Optionen verglichen werden muss.

3 Stimmen

Beim Parsen zurückgegebener Daten von memcached in node.js mit /[ \n\r ]/g hat bei mir den gewünschten Erfolg gebracht. Danke Gone Coding! Die Option in der Antwort hat es vermasselt.

0 Stimmen

* Apple hat die Verwendung von Wagenrücklauf-Zeilenenden in MacOS X eingestellt.

643voto

PointedEars Punkte 14254

Zeilenumbrüche (besser: Zeilenumbrüche) können einer der folgenden sein: Carriage Return (CR, \r , auf älteren Macs), Zeilenvorschub (LF, \n , auf Unices inkl. Linux) oder CR gefolgt von LF ( \r\n , unter WinDOS). (Im Gegensatz zu einer anderen Antwort, hat dies nichts mit der Zeichenkodierung zu tun).

Daher ist die effizienteste RegExp um alle Varianten abzugleichen, ist

/\r?\n|\r/

Wenn Sie alle Zeilenumbrüche in einer Zeichenkette abgleichen wollen, verwenden Sie einen globalen Abgleich,

/\r?\n|\r/g

beziehungsweise. Fahren Sie dann mit der replace Methode, wie in mehreren anderen Antworten vorgeschlagen. (Wahrscheinlich tun Sie no die Zeilenumbrüche entfernen, aber durch andere Leerzeichen ersetzen, z. B. das Leerzeichen, so dass die Wörter intakt bleiben).

22 Stimmen

Der Vollständigkeit halber sei angemerkt, dass es im Unicode vier verschiedene Zeichen für neue Zeilen gibt: \u000a ou \n , was ein Zeilenvorschub ist; \u000d ou \r was ein Wagenrücklauf ist; \u2028 ein Zeilentrennzeichen; und \u2029 , ein Absatztrennzeichen. In der Praxis ist die von Ihnen angegebene Regex jedoch in den meisten Fällen ausreichend.

5 Stimmen

@MathiasBynens Danke, aber U+2028 und U+2029 tun es ausdrücklich no bilden Zeilenumbrüche in HTML (4.01), auf denen der DOM-Baum und der Live-Wert der Textarea basieren: w3.org/TR/html4/struct/text.html#whitespace

5 Stimmen

@PointedEars Ja, aber die HTML-Serialisierung findet nicht statt, wenn die Textarea die .value dynamisch, z.B. textarea.value = 'a\u2029b'; textarea.value.charAt(1) == '\u2029'; // true . Aber das ist wahrscheinlich ein Grenzfall - wie gesagt, in den meisten Fällen ist Ihre Regex ausreichend.

182voto

RobW Punkte 9429
var str = " \n this is a string \n \n \n"

console.log(str);
console.log(str.trim());

String.trim() entfernt Leerzeichen am Anfang und Ende von Zeichenketten, einschließlich Zeilenumbrüchen.

const myString = "   \n \n\n Hey! \n I'm a string!!!         \n\n";
const trimmedString = myString.trim();

console.log(trimmedString);
// outputs: "Hey! \n I'm a string!!!"

Hier ist ein Beispiel für eine Fiedel: http://jsfiddle.net/BLs8u/

HINWEIS! wird nur der Anfang und das Ende der Zeichenkette abgeschnitten, nicht aber Zeilenumbrüche oder Leerzeichen in der Mitte der Zeichenkette.

52 Stimmen

Dabei werden nur die Zeilenumbrüche am Anfang und am Ende der Zeichenkette entfernt. OP fragte, wie man ALLE Zeilenumbrüche entfernen kann.

7 Stimmen

Ja, ich füge es nur als Option hinzu.

4 Stimmen

Für das, was ich brauchte - Anfang und Ende des Strings - hat es funktioniert. Danke!

91voto

Kendall Frey Punkte 41152

Sie können verwenden \n in einer Regex für Zeilenumbrüche, und \r für Zeilenumbrüche.

var str2 = str.replace(/\n|\r/g, "");

Unterschiedliche Betriebssysteme verwenden unterschiedliche Zeilenenden, mit unterschiedlichen Mischungen von \n y \r . Diese Regex wird sie alle ersetzen.

0 Stimmen

Ich denke, dies wird nur das erste Vorkommen ersetzen

8 Stimmen

/\n|\r/g ist effizienter geschrieben /[\n\r]/g oder sogar /[\n\r]+/g . Vermeiden Sie Abwechslung, es sei denn, Sie brauchen sie unbedingt.

1 Stimmen

Ich bin mir nicht sicher, ob dies eine Beschwerde sein soll. Es tut, was ich sagte: Entfernen Sie ALLES, was nicht in diesem HEX-Bereich. Welche Zeichen das sind, hängt natürlich vom Zeichensatz ab, aber in diesem Beitrag ging es um ASCII.

60voto

Freezystem Punkte 4206

Die einfachste Lösung wäre:

let str = '\t\n\r this  \n \t   \r  is \r a   \n test \t  \r \n';
str = str.replace(/\s+/g, ' ').trim();
console.log(str); // logs: "this is a test"

.replace() con /\s+/g regexp ändert sich alle Gruppen der Leerzeichen auf ein einziges Leerzeichen in der gesamten Zeichenfolge, dann .trim() das Ergebnis, um alle überschüssigen Leerzeichen vor und nach dem Text zu entfernen.

Werden als Leerzeichen betrachtet:
[ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]

1 Stimmen

Großartig, aber ich bekomme es hin, indem ich die Variable neu zuweise: str = str.replace(/\s+/g, ' ').trim();

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