我们正在使用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")
});





javascript - 使用javascript正则表达式删除多个反斜杠,同时保留\n特殊字符-LMLPHP

10-08 12:46