node.jsで複数行の文字列を実行するにはどうすればよいですか?


128

node.jsの台頭に伴い、JavaScriptでは複数行の文字列の必要性が高まっています。

  1. ブラウザで機能しない場合でも、Node.JSでこれを行う特別な方法はありますか?
  2. 私がサポートできる計画またはこれを行うための少なくとも機能要求はありますか?

私はあなたが\n\すべての行の終わりで使用できることをすでに知っています、それは私が望むものではありません。


1
一体どうしてハードラインリターンを挿入する必要があるのですか?DOMにはそれをサポートするものはなく(「pre」を除く)、他のすべての一般的な戻り値の型は関係ありません。
jcolebrand

したがって、左側にタブが表示されて、右側にタブが表示されることはありません。私は両方を持っているか、どちらも持っていないのが好きです。現在print( '<div>')、HTMLの印刷に使用しています。「きれい」なタブもリターンもありませんが、Perl <<EOF..EOFスタイルの文字列やJavaスタイルのJSPファイルを使用する方が簡単です。とにかく、複数行の文字列に変数を入力できるようにする必要があります。とりあえず抜きます。
ブライアンフィールド

9
@jcolebrand:Node.JSは主にDOM操作に関係していません。完全なアプリケーション開発環境です。nodejs.orgを
Roy Tinker、

@RoyTinkerはい、しかし彼はその時にブラウザを呼びました、そしてその上彼は非\n実装を呼びました、それでそれはかなりよくブラウザだけです。
jcolebrand 2011年

@GeorgeBaileyスタックオーバーフローを引き続き使用する場合、ここで正しい答えを修正できますか?
mikemaccana 2016年

回答:


164

ノードv4とノードの現在のバージョン

ES6(およびv4以降のNodeのバージョン)以降、新しい「テンプレートリテラル」組み込みタイプがJavascriptに追加され(バックティック「 `」で示される)、次のように複数行の文字列を作成するためにも使用できます。 :

`this is a 
single string`

これは次のように評価されます。 'this is a\nsingle string'

最初の行の終わりの改行結果の文字列に含まれます。

プログラマーが文字列を作成できるようにテンプレートリテラルが追加されました。次のように、util.format他のテンプレートを使用せずに、値またはコードを文字列リテラルに直接注入できます。

let num=10;

console.log(`the result of ${num} plus ${num} is ${num + num}.`);

これは、「10 + 10の結果は20です」と出力します。コンソールに。

古いバージョンのノード

古いバージョンのノードでは、「行継続」文字を使用して、次のような複数行の文字列を記述できます。

'this is a \
single string'

これは次のように評価されます'this is a single string'

最初の行の終わりの改行は、結果の文字列に含まれないことに注意してください。


最終的にはstackoverflow.com/questions/805107/…を使用すると思います。変数を使用できるように拡張する場合があります。それは確かに創造的です!しかし、これはNode.JSなので、ブラウザーの互換性について心配する必要はありません。私の場合は、バージョンの互換性についても気にする必要はありません。
ブライアンフィールド

6
「Javascriptは複数行の文字列をサポートしていません...」 ES5の時点でサポートしています。V8(GoogleのJavaScriptエンジン)にあるため、おそらくNodeJS(V8を使用)にあります。[セクション7.8.4] *(es5.github.com/#x7.8.4)のLineContinuationを参照してください。ツールのサポートは、しばらくの間大ざっぱかもしれません。
TJクラウダー

それはio.jsにありますが、Node.JSにはまだありません-いくつかのリンクを追加して回答を追加しました
Simon D

1
Node 4.0+は、本質的に複数行の文字列をサポートするようになりました。
Rob Raisch 2016年

46

複数行文字列は現在JavaScriptの一部であり(ES6以降)、node.js v4.0.0以降でサポートされています。

var text = `Lorem ipsum dolor 
sit amet, consectetur 
adipisicing 
elit.  `;

console.log(text);

2
この回答はすぐにトップに投票する必要があります!テンプレート文字列の詳細については、developer.mozilla.org / en-US / docs / Web / JavaScript / Reference /…を参照てください。
user3413723

2
テンプレート内に$ {variablehere}構文を追加することで変数を簡単に追加できることに注意したいかもしれません( ``ティック)
Joseph Astrahan

40

複数行の文字列を意味する場合、正確には何を探していますか。

あなたは次のようなものを探していますか?

var str = "Some \
    String \
    Here";

「Some String Here」と表示されるのはどれですか。

その場合、上記は有効なJavascriptですが、これはそうではないことに注意してください。

var str = "Some \ 
    String \
    Here";

違いは何ですか?の後のスペース\。デバッグして楽しんでください。


よくそれを阻止します。\の後ろに文字を入れずにスペースを表示することはできません。
jcolebrand 2011年

1
@jcolebrand:はい、とても楽しいですね:P
Robert


1
これは汚いハックです。いやいや!
Raynos

1
@Robertに感謝します。「\」のインサイトの後のスペースによって時間を節約できました。
gpestana 2016年

8

見てくださいmstringの node.js.ためのモジュールを

これは、JavaScriptで複数行の文字列を使用できるようにする単純な小さなモジュールです。

これを行うだけです:

var M = require('mstring')

var mystring = M(function(){/*** Ontario Mining and Forestry Group ***/})

取得するため

mystring === "Ontario\nMining and\nForestry\nGroup"

そして、それだけです。

動作のしくみ
Node.jsでは.toString、関数のメソッドを呼び出すことができ、コメントを含む関数定義のソースコードが提供されます。正規表現はコメントの内容を取得します。

はい、それはハックです。Dominic Tarrからの使い捨てコメントに触発されました。


注:モジュール(2012/13/11現在)では、閉じる前に空白を使用できないため***/、自分でハッキングする必要があります。


1
または、空白の修正を含むmstringのブランチを使用します。ありがとう!github.com/davidmurdoch/mstring
ドルスカ

6

ここで人々が投稿していることはさておき、連結は最新のjavascript vmsに参加するよりもはるかに高速であると聞いています。意味:

var a = 
[ "hey man, this is on a line",
  "and this is on another",
  "and this is on a third"
].join('\n');

以下より遅くなります:

var a = "hey man, this is on a line\n" + 
        "and this is on another\n" +
        "and this is on a third";    

場合によっては。http://jsperf.com/string-concat-versus-array-join/3

余談ですが、これはCoffeescriptの魅力的な機能の1つです。はい、はい、私は知っています、憎しみは憎むつもりです。

html = '''
       <strong>
         cup of coffeescript
       </strong>
       '''

特にHTMLスニペットに適しています。私はそれを使う理由を言っているわけではありませんが、それがecma land :-(。

ジョシュ


1
私にとってCoffeeScriptの唯一の問題は、前回チェックしたGroovyの問題と同じです。ファイルがから.coffeeに変換されると.js、行番号が乱雑になります。私はCoffeeScriptを試していませんが、Groovyを試していると、生成された.javaファイルを取得せずにデバッグするのが非常に難しいことがわかりました。
ブライアンフィールド

私はコーヒーでかなり大きなプロジェクトを書きました。コンパイルされたコードを確認する必要があります。ただし、読みやすいです。いくつかの大規模なプロジェクト(zombie.js、pow、riak-js)が記述されていますが、ノードコミュニティには依然としてコーヒースクリプトに関する容認できない汚名があります。ライブラリーを使用するのにコーヒーを使用する必要がないという事実にもかかわらず、人々は「ああ、コーヒー、ヤック」と言ってすぐに先へ進むので、私は現在、より小さなOSSの一部を移植しています。
Josh

私はコーヒースクリプトが嫌いです。:Pしかし、私は間違いなく '' '文字列ブロックのファンです!または... PHPヒアドキュメント構文。
BMiner

(join( '\ n')を使用した)配列パターンは、ほとんどの場合、従来の文字列連結よりも遅くなります。
BMiner

1
IE7以下を除き、これは本当です。そして、あなたが気づくでしょう、私はそれを言って、jsperfにリンクしました。
ジョシュ



1

受け入れられた回答に加えて:

`this is a 
single string`

これは「これは\ n単一の文字列です」と評価されます。

文字列補間を使用したいが改行しない場合は、通常の文字列のようにバックスラッシュを追加します。

`this is a \
single string`

=> 'これは単一の文字列です'。

ただし、手動の空白は必要です。

`this is a\
single string`

=> 'これは単一の文字列です'


0

Vanilla Javasciptは複数行の文字列をサポートしていません。言語プリプロセッサは最近実現可能であることが判明しています。

これらの中で最も人気のあるCoffeeScriptにはこの機能がありますが、それは最低限ではなく、新しい言語です。Googleのtraceurコンパイラーは新しい機能をスーパーセットとして言語に追加しますが、複数行の文字列は追加された機能の1つだとは思いません。

複数行の文字列と他のいくつかの機能をサポートするJavaScriptの最小限のスーパーセットを作成したいと考えています。私はこの小さな言語を、コーヒースクリプトの最初のコンパイラを書く前に始めました。今年の夏に仕上げる予定です。

プリコンパイラを使用できない場合は、HTMLのスクリプトタグに複数行のデータを格納するスクリプトタグハックもありますが、評価されないようにカスタムタイプを指定します。次に、後でjavascriptを使用して、scriptタグのコンテンツを抽出できます。

また、ソースコードの任意の行の末尾に\を置くと、改行がなかったかのように無視されます。改行が必要な場合は、「\ n \」で行を終了する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.