Was ist das Newline-Zeichen des JavaScript-Strings?

Lesezeit: 6 Minuten

Was ist das Newline Zeichen des JavaScript Strings
Landon Kühn

Ist \n die universelle Newline-Zeichenfolge in JavaScript für alle Plattformen? Wenn nicht, wie bestimme ich den Charakter für die aktuelle Umgebung?

Ich frage nicht nach dem HTML-Newline-Element (<BR/>). Ich frage nach der Newline-Zeichenfolge, die in JavaScript-Strings verwendet wird.

  • Ich habe ein mehrzeiliges Eingabesteuerelement, bei dem vom Benutzer erwartet wird, dass er eine durch Zeilenumbruch getrennte Liste eingibt. Ich muss die Liste analysieren, indem ich zuerst die Zeichenfolge in Zeilenumbrüchen aufteile.

    – Landon Kuhn

    20. Juli 2009 um 20:41 Uhr

  • @landon9720: Für meine mehrzeiligen Eingabesteuerelemente habe ich eine getValue Funktion, die die nimmt value und kehrt zurück value.replace(/\r\n/g,'\n') – nur um die Ausgabe über Browser/Plattformen hinweg konsistent zu halten.

    – Roy Tinker

    8. März 2012 um 17:16 Uhr


  • Gute Frage, besonders für diejenigen, die neu in der Programmierung sind! Außerhalb von HTML und in JavaScript ist es gut zu wissen, wie man zur nächsten/neuen Zeile wechselt.

    – Eric Bishard

    11. Mai 2015 um 19:57 Uhr

  • Kasse npmjs.com/package/eol

    – ryanve

    18. Februar 2017 um 8:58 Uhr

Was ist das Newline Zeichen des JavaScript Strings
Merkator

Ich habe gerade ein paar Browser mit diesem dummen Stück JavaScript getestet:

function log_newline(msg, test_value) {
  if (!test_value) { 
    test_value = document.getElementById('test').value;
  }
  console.log(msg + ': ' + (test_value.match(/\r/) ? 'CR' : '')
              + ' ' + (test_value.match(/\n/) ? 'LF' : ''));
}

log_newline('HTML source');
log_newline('JS string', "foo\nbar");
log_newline('JS template literal', `bar
baz`);
<textarea id="test" name="test">

</textarea>

IE8 und Opera 9 unter Windows verwenden \r\n. Alle anderen von mir getesteten Browser (Safari 4 und Firefox 3.5 unter Windows und Firefox 3.0 unter Linux) verwenden \n. Sie können alle damit umgehen \n ganz gut, wenn Sie den Wert festlegen, obwohl IE und Opera das zurück konvertieren werden \r\n wieder intern. Es gibt einen SitePoint-Artikel mit einigen weiteren Details namens Zeilenenden in Javascript.

Beachten Sie auch, dass dies unabhängig von den tatsächlichen Zeilenenden in der HTML-Datei selbst ist (sowohl \n und \r\n gleiche Ergebnisse liefern).

Beim Absenden eines Formulars werden Zeilenumbrüche von allen Browsern kanonisiert %0D%0A bei der URL-Codierung. Um das zu sehen, laden Sie zB data:text/html,<form><textarea name="foo">foo%0abar</textarea><input type="submit"></form> und drücken Sie die Senden-Schaltfläche. (Einige Browser blockieren das Laden der übermittelten Seite, aber Sie können die URL-codierten Formularwerte in der Konsole sehen.)

Ich glaube aber nicht, dass du wirklich viel bestimmen musst. Wenn Sie den Text nur an Zeilenumbrüchen aufteilen möchten, können Sie Folgendes tun:

lines = foo.value.split(/\r\n|\r|\n/g);

  • Hat bei mir funktioniert, musste aber das globale Flag verwenden: /\r\n|\r|\n/g

    – AdrianoFerrari

    11. Februar 2012 um 1:01 Uhr

  • @Edson und falsch, da wird es behandelt \r\n als zwei Zeilenumbrüche anstelle von einem. Wenn Sie kurz wollen, /\r?\n/g wird wahrscheinlich reichen (wer benutzt überhaupt noch Mac OS 9?).

    – Merkator

    27. März 2013 um 22:22 Uhr

  • Da der SitePoint-Artikel aus dem Jahr 2004 stammt, sind die darin enthaltenen Informationen für aktuelle JS-Implementierungen möglicherweise nicht relevant.

    – cbmanica

    1. Oktober 2013 um 23:52 Uhr

  • Match ist angeblich viel schneller als Split: jsperf.com/regex-split-vs-match

    – Welke

    20. März 2014 um 13:03 Uhr


  • Das scheint ein Overkill zu sein, siehe meine Antwort unten für eine einfachere Lösung!

    – Kasim

    17. März 2017 um 11:38 Uhr

Ja, es ist universell.

Obwohl '\n' ist das Universelle Neue Zeile müssen Sie bedenken, dass je nach Eingabe Zeilenumbrüchen Zeilenumbrüchen vorangestellt werden können ('\r').

  • \n ist das Universelle Zeilenvorschub Zeichen (LF). Die genaue Newline-Byte-Sequenz hängt von der Plattform ab (\r\n, \n oder \r: en.wikipedia.org/wiki/Newline). Und das ist die Frage, die Landon stellt. Sie widersprechen sich selbst, wenn Sie zuerst sagen, dass es sich um das universelle Zeilenumbruchzeichen handelt, und dann sagen, dass ihm möglicherweise ein CR vorangestellt ist. Welches ist es?

    – Merkator

    20. Juli 2009 um 20:23 Uhr

  • \n ist das Zeilenumbruchzeichen (Zeilenvorschub), auch wenn ihm ein Wagenrücklauf vorangestellt ist. CR sollte niemals allein verwendet werden, obwohl die meisten Windows-APIs und -Apps es als Zeilenumbruch analysieren. LF funktioniert auch unter Windows genauso gut. CR ist nur ein Artefakt aus der Zeit, als Computer nur elektronische Schreibmaschinen waren.

    – GolezTrol

    18. Juli 2011 um 19:34 Uhr

  • @GolezTrol Es gibt triftige Gründe, CR allein zu verwenden. Zum Beispiel in einem Konsolenfenster zum Zeilenanfang zurückkehren, um die Zeile zu überschreiben, ohne zur nächsten Zeile zu wechseln. Dies wird häufig verwendet, um sich ändernde prozentuale Fortschrittsindikatoren in Befehlszeilendienstprogrammen zu schreiben.

    – Dan Bechard

    9. November 2015 um 15:55 Uhr

  • @ Dan Danke für das Feedback. Natürlich hätte ich nie „nie“ sagen sollen, denn es gibt durchaus Bewerbungen für ein CR alleine. Aber die Frage bezieht sich auf Javascript, nicht auf Befehlszeilenprogramme. Natürlich kann ein Skript im CLI-Modus ausgeführt werden (obwohl ich nicht weiß, ob CR so funktioniert, wie Sie es damals gesagt haben), und Sie können sogar Javascript verwenden, um ein Skript zu generieren, das in der Befehlszeile ausgeführt wird. Dies sind mögliche Ausnahmen von der Regel, aber im Kontext der Frage scheinen sie nicht zuzutreffen. Trotzdem danke für die Erwähnung.

    – GolezTrol

    9. November 2015 um 16:16 Uhr

1646256910 434 Was ist das Newline Zeichen des JavaScript Strings
Kasim

Verwenden Sie nicht “\n”. Versuchen Sie einfach Folgendes:

var string = "this\
is a multi\
line\
string";

Geben Sie einfach einen Backslash ein und fahren Sie weiter! Es wirkt wie ein Zauber.

  • ES6 unterstützt auch mehrzeilige Werte mit der tilde Zeichen (auch Backtick genannt).

    – Kasim

    8. Juli 2016 um 9:10 Uhr

  • @Qasim – FYI, ich glaube, Tilde und Backtick sind unterschiedliche Zeichen, siehe ~ Tilde vs ` Backtick.

    – Chris Burgess

    23. Oktober 2016 um 4:14 Uhr


  • Ah – Ja, du hast recht. ES6 verwendet das Backtick-Zeichen für mehrzeilige Zeichenfolgen

    – Kasim

    31. Oktober 2016 um 11:59 Uhr

  • Obwohl legal, ist das in JS-Kreisen verpönt. Es fehlt an Lesbarkeit. Verwenden Sie nach Möglichkeit die Backticks von ES6. Wenn nicht, \n

    – Gotofritz

    7. Mai 2017 um 0:14 Uhr

  • Beim Schreiben von Code funktioniert dies. Es sieht so aus, als ob es beim OP darum geht, Text aus einem Textbereich zu analysieren.

    – Jinglesthula

    30. Mai 2017 um 16:21 Uhr

Es könnte am einfachsten sein, einfach alle Fälle des Zeilenumbruchzeichens zu behandeln, anstatt zu prüfen, welcher Fall es dann anwendet. Wenn Sie beispielsweise den Zeilenumbruch ersetzen müssen, gehen Sie wie folgt vor:

htmlstring = stringContainingNewLines.replace(/(\r\n|\n|\r)/gm, "<br>");

1646256911 223 Was ist das Newline Zeichen des JavaScript Strings
Feinerer Relaxsessel

Ja, verwenden Sie \n, es sei denn, Sie generieren HTML-Code, in diesem Fall möchten Sie verwenden <br />.

1646256911 409 Was ist das Newline Zeichen des JavaScript Strings
Peter Mortensen

In einer E-Mail-Link-Funktion verwende ich “%0D%0A”:

function sendMail() {
    var bodydata="Before "+ "%0D%0A";
        bodydata+="After"

    var MailMSG = "mailto:[email protected]"
             + "[email protected]"
             + "&subject=subject"
             + "&body=" + bodydata;
    window.location.href = MailMSG;
}

HTML

<a href="#" onClick="sendMail()">Contact Us</a>

1646256911 409 Was ist das Newline Zeichen des JavaScript Strings
Peter Mortensen

Sie können “ Anführungszeichen verwenden (die unter der Esc Taste) mit ES6. Du kannst also so etwas schreiben:

var text = `fjskdfjslfjsl
skfjslfkjsldfjslfjs
jfsfkjslfsljs`;

  • perfekter vorschlag.

    – Metehan Gülac

    18. Februar 2021 um 7:46 Uhr

  • Auf welcher Tastaturbelegung? Welche spezielle Tastatur?

    – Peter Mortensen

    5. November 2021 um 16:39 Uhr

  • Der ASCII-Code von @PeterMortensen Backtick ist 96, Sie können ihn also mit Alt + 96 (auf der Tastatur) eingeben. Es befindet sich zwischen Esc und Tab auf dem US-Tastaturlayout. Es ist auf AltGr+7 im ungarischen Layout.

    – CLS

    22. Februar um 9:45 Uhr

916360cookie-checkWas ist das Newline-Zeichen des JavaScript-Strings?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy