我们正在使用JS加载JSON数据,这些数据通常在换行符前具有多个反斜杠。例:
{
"test": {
"title": "line 1\\\\\\\nline2"
}
}
我已经尝试过使用replace的各种RegEx模式。 “奇怪”,如果反斜杠的数目为偶数,但似乎不起作用,它们似乎可以工作。
具有2个反斜杠的此示例有效:
"\\n".replace(/\\(?=.{2})/g, '');
尽管此样本具有3不会:
"\\\n".replace(/\\(?=.{2})/g, '');
这是实际的js:
console.log('Even Slashes:');
console.log("\\n".replace(/\\(?=.{2})/g, ''));
console.log('Odd Slashes:');
console.log("\\\n".replace(/\\(?=.{2})/g, ''));
最佳答案
我认为您正在尝试删除换行符str.replace(/\\+\n/g, "\n")
之前的所有反斜杠。
另外,您可能会误解how escape sequences work:"\\"
是一个反斜线"\\n"
是一个反斜杠,后跟字母n
请参阅下面的代码以获得解释,并注意Stack Overflow的控制台输出正在重新编码字符串,但是如果您检查实际的dev工具,则更好,并且可以显示编码后的字符。
const regex = /\\+\n/g;
// This is "Hello" + [two backslashes] + "nworld"
const evenSlashes = "Hello\\\\nworld";
// This is "Hello" + [two backslashes] + [newline] + "world"
const oddSlashes = "Hello\\\\\nworld";
console.log({
evenSlashes,
oddSlashes,
// Doesn't replace anything because there's no newline on this string
replacedEvenSlashes: evenSlashes.replace(regex, "\n"),
// All backslashes before new line are replaced
replacedOddSlashes: oddSlashes.replace(regex, "\n")
});