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

时间:2011-06-02 21:08:22

标签: string node.js multiline

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

  1. 在Node.JS中是否有一种特殊的方法可以做到这一点,即使它在浏览器中不起作用?
  2. 是否有任何计划或至少有功能要求我可以支持?
  3. 我已经知道你可以在每一行的末尾使用\n\,这不是我想要的。

8 个答案:

答案 0 :(得分:122)

节点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'

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

答案 1 :(得分:39)

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

您正在寻找类似的东西:

var str = "Some \
    String \
    Here";

哪个会打印为“Some String Here”?

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

var str = "Some \ 
    String \
    Here";

有什么区别? \之后的空格。有趣的调试。

答案 2 :(得分: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)在结束***/之前不允许空格,因此您需要自己破解它。

答案 3 :(得分: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中更具吸引力的功能之一。是的,是的,我知道,仇恨会讨厌。

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

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

约什

答案 4 :(得分:4)

看一下CoffeeScript:http://coffeescript.org

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

答案 5 :(得分:1)

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

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

参见&#34;新字符串方法&#34;在http://davidwalsh.name/es6-io获取详细信息和&#34;模板字符串&#34;在http://kangax.github.io/compat-table/es6/跟踪兼容性。

答案 6 :(得分:1)

除了可接受的答案:

`this is a 
single string`

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

如果您想使用字符串插值但没有换行, 只需在普通字符串中添加反斜杠即可:

`this is a \
single string`

=>“这是一个字符串”。

但是请记住,手动空白是必需的:

`this is a\
single string`

=>'这是单个字符串'

答案 7 :(得分:0)

Vanilla Javascipt不支持多行字符串。语言预处理器最近变得可行。

CoffeeScript,其中最受欢迎的就是这个功能,但它不是最小的,它是一种新语言。谷歌的traceur编译器为语言添加了新的功能作为超集,但我不认为多行字符串是增加的功能之一。

我正在寻找支持多行字符串和其他一些功能的javascript的最小超集。在为coffeescript编写初始编译器之前,我开始使用这种小语言。我打算今年夏天完成它。

如果预编译器不是一个选项,那么还有一个脚本标签hack,你将多行数据存储在html的脚本标签中,但是给它一个自定义类型,这样它就不会被篡改。然后使用javascript,您可以提取脚本标记的内容。

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