我在变量中有字符串文字\n
。我试图用空字符串替换它。但它不起作用。
var value = "\\\n"
value = value.replace(/(?:\\[rn])+/g, "")
console.log(value)
值的计算结果为字符串文字 - \n
。我希望console.log
没有输出。但它打印
\
空行后跟反斜杠(由于某种原因,堆栈溢出修剪了上面输出中的空行)。
请注意,此问题与替换换行符 - \n
答案 0 :(得分:5)
不要像\\[rn]
那样。即,不要将反斜杠与r
,n
分开。这会改变它的含义。
value.replace(/[\r\n]+/g, "")
如果您还想替换回车符或换行符之前存在的反斜杠字符,请在字符类之前添加\\
。
value.replace(/\\[\r\n]+/g, "")
答案 1 :(得分:4)
我在变量
中有字符串文字\n
不,不。你有\(newline)
,这是一个完全不同的事情。
var value = "\\\n"
value
是一个长度为2的字符串。第一个字符是反斜杠。第二个字符是换行符。
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 devtools控制台中的一些非直观行为感到困惑。 console.log('\n')
按预期打印空行。但是,console.log('a\n')
仅打印a
,没有明显的换行符。换句话说,Chrome devtools(以及FF)在某些情况下似乎会抑制最终的尾随换行符。
答案 2 :(得分:3)
您应该使用:
value = value.replace(/\\[\r\n]+/g, "");
// ""
这将取代\r
或\n
,后面跟着输入中的文字\
。
答案 3 :(得分:0)
这个效果很好.replace(/\\r\\n?|\\n/g, '\n');