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

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

  1. 有没有一种特殊的方法可以在 Node.JS 中实现这一点,即使它不能在浏览器中工作?
  2. 是否有任何计划或至少一个功能要求,这样做,我可以支持?

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

161879 次浏览

当您指的是多行字符串时,您到底在寻找什么。

你是不是在寻找这样的东西:

var str = "Some \
String \
Here";

哪个会打印成“这里的一些线”?

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

var str = "Some \
String \
Here";

有什么区别? 在 \之后的一个空格。祝你调试愉快。

Node v4和节点的当前版本

在 ES6中(Node 的版本大于 v4) ,一个新的“模板文字”内部类型被添加到 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'

注意,第一行末尾的换行符是结果字符串中包含的 没有

除了人们在这里发布的内容之外,我还听说连接比加入现代 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

除此之外,我发现这是 咖啡稿中最吸引人的特性之一。是的,是的,我知道,讨厌的人会讨厌的。

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

它特别适合 HTML 代码片段。我不是说这是一个使用它的理由,但我确实希望它能在 ecma 的土地:。

乔什

VanillaJavascipt 不支持多行字符串。语言预处理器现在已经变得可行了。

CoffeeScript 是其中最流行的一种语言,它有这个特性,但并不是最简单的,它是一种新的语言。Google 的 traceur 编译器为该语言添加了新的超集特性,但我不认为多行字符串是其中一个增加的特性。

我希望创建一个最小的 javascript 超集,它支持多行字符串和其他一些特性。我开始这个小语言前一段时间写的咖啡脚本初始编译器。我计划今年夏天完成它。

如果不能选择预编译器,那么还可以使用 script 标记技术,将多行数据存储在 html 中的 script 标记中,但是给它一个自定义类型,这样它就不会被求值。然后使用 javascript,您可以提取 script 标记的内容。

另外,如果在源代码中的任何一行的末尾放置一个,它将导致新行被忽略,就好像它不存在一样。如果你想要换行,那么你必须以“ n”结束这一行。

请看 CoffeeScript: http://coffeescript.org

它支持多行字符串、插值、数组理解和许多其他好东西。

看一下 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方法,它会提供函数定义的源代码,包括所有注释。正则表达式获取注释的内容。

是的,这是一个黑客。从 多米尼克 · 塔尔的一次性评论启发。


注意: 模块(截至2012/13/11)在关闭 ***/之前不允许使用空格,因此您需要自己修改它。

如果使用 io.js,它支持 ECMAScript 6中的多行字符串。

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

有关详细信息,请参阅 http://davidwalsh.name/es6-io的“新字符串方法”,有关跟踪兼容性,请参阅 http://kangax.github.io/compat-table/es6/的“模板字符串”。

多行字符串是 JavaScript (自 ES6以来)的当前部分,并且在 node.js v4.0.0和更新的版本中受到支持。

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


console.log(text);

除了公认的答案:

`this is a
single string`

计算结果为: ‘ this is a nsingle string’。

如果你想使用字符串插值,但没有一个新的行, 只要像普通字符串那样加上反斜杠即可:

`this is a \
single string`

= > ‘ this is a single string’。

但请记住,手动留白是必要的:

`this is a\
single string`

= > ‘ this is single string’