it-swarm.com.de

So entfernen Sie alle Zeilenumbrüche aus einer Zeichenfolge

Ich habe einen Text in einem Textbereich und habe ihn mit dem Attribut .value ausgelesen.

Jetzt möchte ich alle Zeilenumbrüche entfernen (das Zeichen, das beim Drücken von erzeugt wird) Enter) aus meinem Text, der jetzt .replace mit einem regulären Ausdruck verwendet, aber wie zeige ich einen Zeilenumbruch in einem regulären Ausdruck an?

Wenn das nicht möglich ist, gibt es einen anderen Weg?

364
Wingblade

Dies ist wahrscheinlich eine FAQ. Auf jeden Fall können Zeilenumbrüche (besser: Zeilenumbrüche) Carriage Return (CR, \r, auf älteren Macs), Line Feed (LF, \n, auf Unices inkl. Linux) oder CR gefolgt von sein LF (\r\n, unter WinDOS). (Im Gegensatz zu einer anderen Antwort hat dies nichts mit der Zeichenkodierung zu tun.)

Daher ist das effizienteste RegExp -Literal für alle Varianten

/\r?\n|\r/

Wenn Sie alle Zeilenumbrüche in einer Zeichenfolge abgleichen möchten, verwenden Sie eine globale Übereinstimmung.

/\r?\n|\r/g

beziehungsweise. Fahren Sie dann mit der Methode replace fort, wie in mehreren anderen Antworten vorgeschlagen. (Wahrscheinlich haben Sie nicht die Zeilenumbrüche entfernen wollen, aber ersetzen Sie sie durch andere Leerzeichen, zum Beispiel das Leerzeichen, damit die Wörter intakt bleiben.)

414
PointedEars

Wie Sie einen Zeilenumbruch finden, hängt von den Betriebssystemkodierungen ab. Windows wäre \r\n, aber Linux verwendet nur \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 beseitigen.

442
Eremite

String.trim() entfernt Leerzeichen am Anfang und Ende von Strings ... 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 Geige: http://jsfiddle.net/BLs8u/

HINWEIS! Beschneidet nur den Anfang und das Ende der Zeichenfolge, keine Zeilenumbrüche oder Leerzeichen in der Mitte der Zeichenfolge.

94
RobW

Sie können \n in einem regulären Ausdruck für Zeilenumbrüche und \r für Zeilenumbrüche verwenden.

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

Verschiedene Betriebssysteme verwenden unterschiedliche Zeilenenden mit unterschiedlichen Mischungen von \n und \r. Dieser reguläre Ausdruck ersetzt sie alle.

39
Kendall Frey

Wenn Sie alle Steuerzeichen, einschließlich CR und LF, entfernen möchten, können Sie dies verwenden:

myString.replace(/[^\x20-\x7E]/gmi, "")

Es werden alle nicht druckbaren Zeichen entfernt. Dies sind alle Zeichen NICHT innerhalb des ASCII HEX-Raums 0x20-0x7E. Sie können den HEX-Bereich nach Bedarf ändern.

22
masi

Die einfachste Lösung wäre:

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

.replace() mit /\s+/g reguläre Ausdrücke alle Gruppen von Leerzeichen in ein einzelnes Leerzeichen in der gesamten Zeichenfolge ändern, dann .trim() das Ergebnis, um alles überschüssige Weiß zu entfernen Leerzeichen vor und nach dem Text.

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

16
Freezystem
var str = "bar\r\nbaz\nfoo";

str.replace(/[\r\n]/g, '');

>> "barbazfoo"
15
Gordon Freeman

So entfernen Sie neue Zeilenzeichen:

yourString.replace(/\r?\n?/g, '')

Dann können Sie Ihre Zeichenfolge abschneiden, um führende und nachfolgende Leerzeichen zu entfernen:

yourString.trim()
13
Si7ius

Die Antwort von PointedEars ist alles, was die meisten von uns brauchen. Aber als ich der Antwort von Mathias Bynens folgte, machte ich eine Wikipedia-Reise und fand diese: https://en.wikipedia.org/wiki/Newline .

Das Folgende ist eine Drop-In-Funktion, die alles implementiert, was die obige Wiki-Seite zum Zeitpunkt der Beantwortung als "neue Zeile" ansieht.

Wenn etwas nicht in Ihren Koffer passt, entfernen Sie es einfach. Auch wenn Sie nach Leistung suchen, ist dies möglicherweise nicht der Fall, aber für ein schnelles Tool, das die Arbeit auf jeden Fall erledigt, sollte dies nützlich sein.

// replaces all "new line" characters contained in `someString` with the given `replacementString`
const replaceNewLineChars = ((someString, replacementString = ``) => { // defaults to just removing
  const LF = `\u{000a}`; // Line Feed (\n)
  const VT = `\u{000b}`; // Vertical Tab
  const FF = `\u{000c}`; // Form Feed
  const CR = `\u{000d}`; // Carriage Return (\r)
  const CRLF = `${CR}${LF}`; // (\r\n)
  const NEL = `\u{0085}`; // Next Line
  const LS = `\u{2028}`; // Line Separator
  const PS = `\u{2029}`; // Paragraph Separator
  const lineTerminators = [LF, VT, FF, CR, CRLF, NEL, LS, PS]; // all Unicode `lineTerminators`
  let finalString = someString.normalize(`NFD`); // better safe than sorry? Or is it?
  for (let lineTerminator of lineTerminators) {
    if (finalString.includes(lineTerminator)) { // check if the string contains the current `lineTerminator`
      let regex = new RegExp(lineTerminator.normalize(`NFD`), `gu`); // create the `regex` for the current `lineTerminator`
      finalString = finalString.replace(regex, replacementString); // perform the replacement
    };
  };
  return finalString.normalize(`NFC`); // return the `finalString` (without any Unicode `lineTerminators`)
});
6
futz.co

Ein Zeilenumbruch in Regex ist\n, also wäre Ihr Skript

var test = 'this\nis\na\ntest\nwith\newlines';
console.log(test.replace(/\n/g, ' '));
5
h2ooooooo

Ich füge meine Antwort hinzu, es ist nur ein Addon zu den obigen, da ich alle/n-Optionen ausprobiert habe und es nicht funktioniert hat. Ich habe gesehen, dass mein Text mit einem doppelten Schrägstrich vom Server kommt, also habe ich Folgendes verwendet:

var fixedText = yourString.replace(/(\r\n|\n|\r|\\n)/gm, '');
2
chaya D

Versuchen Sie den folgenden Code. Es funktioniert auf allen Plattformen.

var break_for_winDOS = 'test\r\nwith\r\nline\r\nbreaks';
var break_for_linux = 'test\nwith\nline\nbreaks';
var break_for_older_mac = 'test\rwith\rline\rbreaks';

break_for_winDOS.replace(/(\r?\n|\r)/gm, ' ');
//output
'test with line breaks'

break_for_linux.replace(/(\r?\n|\r)/gm, ' ');
//output
'test with line breaks'

break_for_older_mac.replace(/(\r?\n|\r)/gm, ' ');
// Output
'test with line breaks'