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

Split template string on line breaks ignoring literal \n

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

\n 被视为换行,正则表达式将始终匹配它。在你的字符串中,你可以转义 \n 比如:

`line1
same\nline2
line3`

\n 拆分现在将得到:

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

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

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

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

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

console.log(lines);