web-dev-qa-db-ja.com

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

Node.jsの登場により、JavaScriptでは複数行の文字列が必要になりつつあります。

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

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

111
Bryan Field

ノードv4およびノー​​ドの現在のバージョン

ES6(およびNodeのバージョンがv4よりも大きい)の時点で、新しい「テンプレートリテラル」組み込み型がJavascriptに追加されました(バックティック「 `」で示されます)。次のような行ストリング

`this is a 
single string`

'this is a\nsingle string'に評価されます。

最初の行の末尾の改行isは結果の文字列に含まれることに注意してください。

テンプレートリテラルが追加され、プログラマは次のように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'に評価されます。

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

135
Rob Raisch

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

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

console.log(text);
44
Vijey

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

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

var str = "Some \
    String \
    Here";

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

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

var str = "Some \ 
    String \
    Here";

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

39
Robert

Node.jsの mstring モジュールを見てください。

これは、JavaScriptで複数行の文字列を使用できるシンプルな小さなモジュールです。

これを行うだけです:

var M = require('mstring')

var mystring = M(function(){/***OntarioMining andForestryGroup***/})

取得するため

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

そしてそれはほとんどそれです。

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

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


注:モジュール(2012/13/11現在)は、_***/を閉じる前に空白を許可しないため、自分でハックする必要があります。

8
David Murdoch

ここに投稿されているものとは別に、連結は最新の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/

余談ですが、これは Coffeescript のより魅力的な機能の1つです。はい、はい、私は知っています、嫌いは嫌いです。

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

特にHTMLスニペットに適しています。私はそれを使用する理由を言っていませんが、私はそれがecma landに着陸することを望みます:-(。

ジョシュ

6
Josh

CoffeeScriptを見てください: http://coffeescript.org

複数行の文字列、補間、配列の内包表記、その他多くのニースのものをサポートしています。

4
Ricardo Tomasi

Io.jsを使用する場合、ECMAScript 6と同様に複数行の文字列をサポートします。

var a =
`this is
a multi-line
string`;

http://davidwalsh.name/es6-io の「新しい文字列メソッド」と http://kangax.github.io/compat-tableの「テンプレート文字列」を参照してください。/es6 / 追跡の互換性のため。

1
Simon D

Vanilla Javasciptは複数行の文字列をサポートしていません。言語プリプロセッサは、最近では実現可能になっています。

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

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

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

また、ソースコードの行の最後に\を挿入すると、改行が存在しないかのように無視されます。改行が必要な場合は、行を「\ n \」で終了する必要があります。

0
Tim Caswell

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

`this is a 
single string`

「これはa\nsingle文字列です」と評価されます。

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

`this is a \
single string`

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

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

`this is a\
single string`

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

0
jsnceo