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

11voto

vishu2124 Punkte 3438

NUTZEN SIE DIE FOLGENDE FUNKTION UND MACHEN SIE SICH DAS LEBEN LEICHT

Am einfachsten ist es, reguläre Ausdrücke zu verwenden, um Zeilenumbrüche in einer Zeichenkette zu erkennen und zu ersetzen. In diesem Fall verwenden wir die Funktion replace zusammen mit der Zeichenkette, die in unserem Fall eine leere Zeichenkette ist.

function remove_linebreaks( var message ) {
    return message.replace( /[\r\n]+/gm, "" );
}

In dem obigen Ausdruck stehen g und m für globale und mehrzeilige Flaggen

9voto

futz.co Punkte 177

Die von PointedEars gegebene Antwort ist alles, was die meisten von uns brauchen. Aber als ich der Antwort von Mathias Bynens folgte, machte ich einen Ausflug zu Wikipedia und fand dies: https://en.wikipedia.org/wiki/Newline .

Das Folgende ist eine Drop-in-Funktion, die alles implementiert, was die obige Wiki-Seite zum Zeitpunkt dieser Antwort als "neue Zeile" betrachtet.

Wenn etwas nicht in Ihren Fall passt, entfernen Sie es einfach. Auch, wenn Sie für die Leistung suchen dies vielleicht nicht sein, aber für eine schnelle Werkzeug, das die Arbeit in jedem Fall tut, 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`)
});

4 Stimmen

Erstens - für Leute, die dies nicht mit JS - "die meisten" RE-Flavors Unterstützung \R was "alle" Zeilenvorschübe sind. Zweitens - warum nicht einfach someString.replace(new RegExp(lineTerminators.join('|')), '');

0 Stimmen

@ClasG, Sie haben ein gutes Argument. Ich glaube, mein Gedankengang, als ich dies schrieb, war, nur replace() für die lineTerminators die in der Zeichenkette aus Leistungsgründen vorhanden waren.

9voto

Rohit Tagadiya Punkte 2564

Einfach können wir eine neue Zeile entfernen, indem wir text.replace(/\n/g, " ")

const text = 'Students next year\n GO \n For Trip \n';
console.log("Original : ", text);

var removed_new_line = text.replace(/\n/g, " ");
console.log("New : ", removed_new_line);

5voto

h2ooooooo Punkte 37823

Ein Zeilenumbruch in regex ist \n Ihr Skript würde also lauten

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

5voto

chaya D Punkte 99

Ich füge meine Antwort hinzu, sie ist nur eine Ergänzung zu dem oben Gesagten, Ich habe alle /n-Optionen ausprobiert und es hat nicht funktioniert. Ich habe gesehen, dass mein Text mit einem doppelten Schrägstrich vom Server kommt, also habe ich das hier verwendet:

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

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