3

我有一些多行的文本数据,存储在 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>

4

2 回答 2

4

您可以String.raw在模板文字上使用标签:

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

console.log(lines);
于 2018-05-24T09:59:09.500 回答
2

\n被视为新行,正则表达式将始终匹配它。在您的字符串中,您可以像这样逃脱\n

`line1
same\\nline2
line3`

现在拆分\n将给出:

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

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

["line1", "same\nline2", "line3"].map(value => value.replace(/\\n/g, "\n"))
于 2018-05-24T08:01:07.227 回答