在JavaScript中替换换行符字符串字面量——'\n'

4

我有一个字符串字面量,在变量中包含\n。我想用空字符串替换它。但是它不起作用。

var value = "\\\n"
value = value.replace(/(?:\\[rn])+/g, "")
console.log(value)

value的值为字符串文字-\n。我不希望console.log输出任何内容,但它却打印了。

\

在一个反斜杠后面留空行(由于某种原因,堆栈溢出已经削减了上面输出中的空行)。

注意,这个问题与替换换行符\n无关。


为什么您会期望没有输出? - rnevius
这是我复杂问题的一个较小的示例。 - user2879704
2
"\\\n" 会产生一个反斜杠后跟一个换行符。如果你的字符串中确实包含了 \n,那么应该写成 "\\n"。在这个时候,我不确定你所拥有的字符串真正的值是什么。 - Felix Kling
太棒了.....你很擅长发现错误....错误在变量中,而不是模式中。 - user2879704
4个回答

6

不要像\\[rn]那样做。即,不要分离反斜杠和rn。这会改变它的含义。

value.replace(/[\r\n]+/g, "")

如果你想替换回车符或换行符前存在的反斜杠字符,则需要在字符类之前添加\\
value.replace(/\\[\r\n]+/g, "")

[\r\n] -- 方括号内是字符类。在字符类中,我在某个地方读到,反斜杠就像普通字符一样。那么反斜杠在方括号内是否保留其特殊属性呢? - user2879704
2
@MadhavanKumar:大多数特殊字符都会失去它们的“特殊性”,但是\不是其中之一。 - Felix Kling
正则表达式不会将像\t\r\n这样的反斜杠字符视为单独的字符,因为单独的反斜杠没有任何特殊含义。 - Avinash Raj

6

我有一个字符串文字,在变量中出现了\n

不是的。你有\(newline),这是一种完全不同的东西。

var value = "\\\n"

value 是一个长度为两个字符的字符串。第一个字符是反斜杠。第二个字符是换行符。

value = value.replace(/(?:\\[rn])+/g, "")

你的正则表达式试图替换一个反斜杠后面跟着字母r或字母n。但是你的输入在第二个位置包含一个换行符。换行符既不匹配r也不匹配n。因此没有任何内容被替换,value保留了它原本的值。
更清晰地看到这一点:
> for (i = 0; i < value.length; i++) console.log(value.charCodeAt(i));
< 92
< 10  // this is a newline

你可能会在Chrome开发者工具控制台中遇到一些非直观的行为。 console.log('\n') 如预期地打印出空行。然而,console.log('a\n') 只打印出 a,没有明显的换行符。换句话说,Chrome开发者工具(以及Firefox)似乎在某些情况下抑制了最后的换行符。

如果有人想要将字面字符串字符“\n”替换为空字符串,推荐的解决方案是什么? - Hugobop

3

你应该使用:

value = value.replace(/\\[\r\n]+/g, "");
// ""

这将替换输入中后跟文字“\”的\r\n

0

这个很好用 .replace(/\\r\\n?|\\n/g, '\n');


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