3462 Stimmen

Mehrzeilige Zeichenketten in JavaScript erstellen

Ich habe den folgenden Code in Ruby. Ich möchte diesen Code in JavaScript umwandeln. Was ist der entsprechende Code in JS?

text = <<"HERE"
This
Is
A
Multiline
String
HERE

31voto

ankit bhusal Punkte 106

Eine einfache Möglichkeit, mehrzeilige Strings in JavaScript zu drucken, ist die Verwendung von Template-Literalen (Template-Strings), die durch Backticks (` `) gekennzeichnet sind. Sie können auch Variablen innerhalb eines Template-Strings verwenden (` name is ${value} `)

Sie können auch

const value = `multiline`
const text = `This is a
${value}
string in js`;
console.log(text);

25voto

semente Punkte 6759

Ich mag diese Syntax und Einrückung:

string = 'my long string...\n'
       + 'continue here\n'
       + 'and here.';

(kann aber eigentlich nicht als mehrzeilige Zeichenkette betrachtet werden)

3 Stimmen

Ich verwende diese Methode, mit dem Unterschied, dass ich das "+" an das Ende der vorangehenden Zeile setze, um deutlich zu machen, dass die Anweisung in der nächsten Zeile fortgesetzt wird. Bei Ihnen sind die Einzüge jedoch gleichmäßiger.

0 Stimmen

@Sean ich benutze das auch, und ich ziehe es immer noch vor, das '+' an den Anfang jeder neuen Zeile zu setzen, und das abschließende ';' in eine neue Zeile, weil ich das 'korrekter' finde.

7 Stimmen

Wenn man das + an den Anfang setzt, kann man diese Zeile auskommentieren, ohne andere Zeilen bearbeiten zu müssen, wenn es sich um die erste/letzte Zeile der Sequenz handelt.

21voto

mplungjan Punkte 153338

Abwärtswähler : Dieser Code wird nur zur Information angegeben.

Dies wurde in Fx 19 und Chrome 24 auf Mac getestet

DEMO

var new_comment; /*<<<EOF 
    <li class="photobooth-comment">
       <span class="username">
          <a href="#">You</a>:
       </span>
       <span class="comment-text">
          $text
       </span> 
       @<span class="comment-time">
          2d
       </span> ago
    </li>
EOF*/
// note the script tag here is hardcoded as the FIRST tag 
new_comment=document.currentScript.innerHTML.split("EOF")[1]; 
document.querySelector("ul").innerHTML=new_comment.replace('$text','This is a dynamically created text');

<ul></ul>

17 Stimmen

Das ist furchtbar. +1. Und Sie können verwenden document.currentScript anstelle von getElement...

0 Stimmen

CurrentScript ? In welchen Browsern? Meine Antwort ist mehr als 2 Jahre alt :)

0 Stimmen

Aber es war eine einzigartige Antwort. Ich schreibe tatsächlich ein Polyfill jetzt, aber vor allem, weil jsfiddle lädt Ihr Skript inline. Ich möchte die *Interpolation zu codieren - (Verzicht auf #{}, weil ES7 ${this.var} verordnet.

19voto

mightyiam Punkte 2495

Es gibt diese Bibliothek, die sie schön macht:

https://github.com/sindresorhus/multiline

Vor

var str = '' +
'<!doctype html>' +
'<html>' +
'   <body>' +
'       <h1> unicorns</h1>' +
'   </body>' +
'</html>' +
'';

Nach

var str = multiline(function(){/*
<!doctype html>
<html>
    <body>
        <h1> unicorns</h1>
    </body>
</html>
*/});

1 Stimmen

Diese Unterstützung in nodejs Bei der Verwendung im Browser ist Vorsicht geboten.

3 Stimmen

Laut @HueiTan Docs funktioniert es auch im Browser. Was Sinn macht - es ist nur Function.prototype.String() .

0 Stimmen

Ya, aber es sagte "Während es funktioniert gut in den Browser, es ist vor allem für den Einsatz in Node.js gedacht. Während es im Browser gut funktioniert, ist es hauptsächlich für die Verwendung in Node.js gedacht. Benutzung auf eigene Gefahr." (Sei einfach vorsichtig XD)

19voto

Niv Punkte 275

Ich habe hier eine Menge überkonstruierter Antworten gefunden. Die zwei besten Antworten waren meiner Meinung nach:

1:

 let str = `Multiline string.
            foo.
            bar.`

die schließlich protokolliert wird:

Multiline string.
           foo.
           bar.  

2:

let str = `Multiline string.
foo.
bar.`

Das protokolliert es korrekt, aber es ist hässlich in der Skriptdatei, wenn str innerhalb von Funktionen / Objekten usw. verschachtelt ist...:

Multiline string.
foo.
bar.

Meine wirklich einfache Antwort mit regex, die den str korrekt protokolliert:

let str = `Multiline string.
           foo.
           bar.`.replace(/\n +/g, '\n');

Bitte beachten Sie, dass dies nicht die perfekte Lösung ist, aber es funktioniert, wenn Sie sicher sind, dass nach der neuen Zeile ( \n ) kommt mindestens ein Leerzeichen (+ bedeutet mindestens ein Vorkommen). Es funktioniert auch mit * (null oder mehr).

Sie können auch expliziter sein und {n,} verwenden, was mindestens n Vorkommen bedeutet.

7 Stimmen

Warum sollten Sie nicht einfach [ "line", "line2", "line3" ].join("\n") .

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