使用JS转义换行符

16

我有一个类似于这样的字符串:

"Line 1\nLine 2"

然而,当我对它调用长度时,它会少一个字符:

"Line 1\nLine 2".length // 13

仔细观察:

"Line 1\nLine 2".charAt(6)

我发现\n被替换成了一个单独的字符,看起来像这样:

"
"
有没有一种方法可以将换行符转义为 \n
4个回答

24
无论何时您让Javascript解释此字符串,'\n'将被渲染为换行符(这是一个单字符,因此长度为1)。
要将该字符串用作字面意义上的反斜杠-n,请尝试使用另一个反斜杠对其进行转义。就像这样:
"Line 1\\nLine 2"

如果您在创建字符串时无法这样做,可以使用以下方法将一个字符串转换为另一个字符串:

"Line 1\nLine 2".replace(/\n/, "\\n");

如果您可能有多个换行符的情况,可以通过将正则表达式设置为全局来一次性获取它们,就像这样:

"Line 1\nLine 2\nLine 3".replace(/\n/g, "\\n");

如果操作系统使用不同的换行符,则无法正常工作。 - Jencel
这不是我观察到的。您能提供重现任何故障的步骤吗?Javascript运行的环境抽象了特定操作系统的底层实现细节。虽然这个比喻有时会“泄漏”,但在Windows和Linux上的Firefox和Node上,这种情况并没有发生。 - Jon Carter
此函数:https://github.com/boris-marinov/monad-transformers/blob/master/tutorial/p3.js#L153 - Jencel
1
如果原字符串包含 \n 和 \n 两者,你的 replace() 函数将使它们无法区分。 - Arik
@Arik 不,它不会。 - KHAYRI R.R. WOULFE

6

\n 是换行符。您可以使用 "Line 1\\nLine 2" 进行转义。

请注意,实际的换行符取决于系统并且可能是一个或两个字符长:\r\n\n\r


我认为在任何操作系统中,\r 都不被用作换行符号,它是回车字符而不是换行符或者换行字符。Windows 使用 \r\n,Unix 系统仅使用 \n - Ɗααɳιടԋ Sყҽԃ
根据https://en.wikipedia.org/wiki/Newline#Representation的说法,`\r`在一些旧操作系统中被使用。但是我认为从实际目的出发,现在只有`\r\n`或者`\n`存在。@ƊααɳιടԋSყҽԃ - kapex
哇!我从未知道回车可以用作换行符。不过,感谢您提供的信息。 - Ɗααɳιടԋ Sყҽԃ
在 JavaScript 生成的字符串中,换行符只需使用 \n - KHAYRI R.R. WOULFE

0

如果有人和我一样,来到这里是为了取消转义换行符而不是转义它们,那么这是我的解决方案。

'Line1\\n\\nLine2'.replace(/\\n/g, '\n')

作为工具函数

const unescapeNewLine = (str) => str.replace(/\\n/g, '\n')

0
在JavaScript中,字符串文字中的反斜杠是转义代码的开始,例如换行符的反斜杠n。但是如果您想要在结果字符串中实际使用反斜杠呢?其中一个转义代码是反斜杠反斜杠,用于实际的反斜杠。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接