在换行符上拆分模板字符串忽略文字\ n

时间:2018-05-24 07:58:35

标签: javascript ecmascript-6 template-strings

我有多行文本数据,存储在ES6模板字符串中。任何行都可以包含文字\n字符串。 例如:

`line1
same\nline2
line3`

我想将该字符串拆分为一个行数组,其中每一行都来自模板字符串的一行,而不是在一行中的文字\n处拆分。所以我的预期/想要的结果是一个看起来像这样的JavaScript数组:["line1", "same\nline2", "line3"]

在查看下面的示例时,如果只是使用正则表达式拆分换行符(/\n/),这显然不会发生。

那么,这有可能吗?我是否遗漏/误解了模板字符串的工作原理?

const lines = `line1
same\nline2
line3`.split(/\n/);

document.getElementById('out').textContent = JSON.stringify(lines)
<pre id="out"></pre>

2 个答案:

答案 0 :(得分:3)

您可以在模板文字中使用String.raw标记:

const lines = (String.raw `line1
same\nline2
line3`).split(/\n/);

console.log(lines);

答案 1 :(得分:2)

\n被视为新行,正则表达式将始终与之匹配。在您的字符串中,您可以转义\n,如:

`line1
same\\nline2
line3`

\n分割现在会给出:

 ["line1", "same\nline2", "line3"]

请注意,现在\n只是一个字符串,而不是新行 - 但您可以映射此数组并将其替换为真实新行。

["line1", "same\nline2", "line3"].map(value => value.replace(/\\n/g, "\n"))