如何在node.js中执行多行字符串?

Bry*_*eld 114 string multiline node.js

随着node.js的兴起,JavaScript中的多行字符串变得越来越必要.

  1. 有没有一种特殊的方法在Node.JS中执行此操作,即使它在浏览器中不起作用?
  2. 是否有任何计划或至少有功能要求我可以支持?

我已经知道你可以\n\在每一行的末尾使用,这不是我想要的.

Rob*_*sch 139

节点v4和节点的当前版本

从ES6(以及大于v4的Node版本)开始,Javascript中添加了一个新的"模板文字"内在类型(用反向标记"`"表示),它也可用于构造多行字符串,如:

`this is a 
single string`
Run Code Online (Sandbox Code Playgroud)

评估为:'this is a\nsingle string'.

请注意,在第一行的末尾的换行符包括在生成的字符串英寸

添加了模板文字以允许程序员构造字符串,其中值或代码可以直接注入字符串文字而无需使用util.format或其他模板,如:

let num=10;

console.log(`the result of ${num} plus ${num} is ${num + num}.`);
Run Code Online (Sandbox Code Playgroud)

将打印"10加10的结果为20".到控制台.

旧版本的节点

较旧版本的节点可以使用"行继续"字符,允许您编写多行字符串,例如:

'this is a \
single string'
Run Code Online (Sandbox Code Playgroud)

评估为:'this is a single string'.

请注意,第一行末尾的换行符包含在结果字符串中.

  • *"Javascript不支持多行字符串..."*它与ES5一样,它在V8(谷歌的JavaScript引擎)中,因此可能在NodeJS(使用V8)中.请参阅[第7.8.4节]*(http://es5.github.com/#x7.8.4)中的*LineContinuation*.工具支持可能会有一段时间的粗略. (6认同)

Vij*_*jey 46

多行字符串是JavaScript的当前部分(自ES6起),并在node.js v4.0.0及更高版本中受支持.

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

console.log(text);
Run Code Online (Sandbox Code Playgroud)

  • 这个答案应立即投票到顶部!有关模板字符串的详细信息,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/template_strings. (2认同)
  • 可能需要注意的是,你可以通过在模板中添加$ {variablehere}语法来轻松添加变量(``ticks) (2认同)

Rob*_*ert 39

当你的意思是多线字符串时,你究竟在寻找什么?

你在寻找类似的东西:

var str = "Some \
    String \
    Here";
Run Code Online (Sandbox Code Playgroud)

哪个会打印成"Some String Here"?

如果是这样,请记住以上是有效的Javascript,但这不是:

var str = "Some \ 
    String \
    Here";
Run Code Online (Sandbox Code Playgroud)

有什么不同?之后的空间\.有趣的调试.


Dav*_*och 8

看看node.js 的mstring模块.

这是一个简单的小模块,可以让您在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)在结束前不允许空白***/,因此您需要自己进行破解.


Jos*_*osh 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');
Run Code Online (Sandbox Code Playgroud)

会慢于:

var a = "hey man, this is on a line\n" + 
        "and this is on another\n" +
        "and this is on a third";    
Run Code Online (Sandbox Code Playgroud)

在某些情况下.http://jsperf.com/string-concat-versus-array-join/3

另外,我发现这是Coffeescript中更具吸引力的功能之一.是的,是的,我知道,仇敌会讨厌.

html = '''
       <strong>
         cup of coffeescript
       </strong>
       '''
Run Code Online (Sandbox Code Playgroud)

它特别适合html片段.我不是说它有理由使用它,但我确实希望它会落在ecma土地上:-(.

玩笑


jsn*_*ceo 5

除了接受的答案:

`this is a 
single string`
Run Code Online (Sandbox Code Playgroud)

其计算结果为:'这是一个\ns单个字符串'。

如果你想使用字符串插值但没有换行,只需像普通字符串一样添加反斜杠:

`this is a \
single string`
Run Code Online (Sandbox Code Playgroud)

=> '这是一个字符串'。

请记住,手动空格是必要的:

`this is a\
single string`
Run Code Online (Sandbox Code Playgroud)

=> '这是单个字符串'