Javascript fs.writeFileSync不';t使用转义反斜杠写入字符串

Javascript fs.writeFileSync不';t使用转义反斜杠写入字符串,javascript,node.js,string,escaping,fs,Javascript,Node.js,String,Escaping,Fs,在我的程序中,我试图编写一个字符串,该字符串表示一个正则表达式,与写入文件时完全相同。这意味着保留字符串中出现的任何反斜杠。但是,当我尝试将此字符串写入文件时,每对反斜杠的反斜杠比它应该的少一个 我举例说明这个问题如下: let filepath = path.join(__dirname, 'output.js'); let outputString = "\\d{3}(-|\\s)?\\d{3}(-|\\s)?\\d{4}"; fs.writeFileSync(filepath, outpu

在我的程序中,我试图编写一个字符串,该字符串表示一个正则表达式,与写入文件时完全相同。这意味着保留字符串中出现的任何反斜杠。但是,当我尝试将此字符串写入文件时,每对反斜杠的反斜杠比它应该的少一个

我举例说明这个问题如下:

let filepath = path.join(__dirname, 'output.js');
let outputString = "\\d{3}(-|\\s)?\\d{3}(-|\\s)?\\d{4}";
fs.writeFileSync(filepath, outputString, 'utf-8');
输出结果是:

\d{3}(-|\s)?\d{3}(-|\s)?\d{4}
是否有一些选项可以传递到
fs.writeFileSync
以维护字符串中的所有字符以写入文件

我意识到一种解决方案可能涉及使用库(如)转义此字符串中所有可能的字符,但既然这些特定字符串表示正则表达式,那么这样做真的安全吗?我不想以任何方式改变它们或它们的功能


注意:我意识到这个输出不是真正有效的JavaScript,但它是一个有点做作的示例,说明了我真正想要做的事情。这段代码最能说明当前的问题。

如果要在输出字符串中使用两个反斜杠,则需要使用四个反斜杠。 例:

let filepath=path.join(uu dirname,'output.js');
let outputString=“\\\\d{3}(-124\\\\ s)\\\\d{3}(-124\\\\ s)\\\\d{4}”;
writeFileSync(filepath,outputString,'utf-8');
输出结果将是:

\\d{3}(-|\\s)?\\d{3}(-|\\s)?\\d{4}

一个反斜杠跳过后面的反斜杠…

它已经在维护所有的反斜杠。您的字符串
outputString
中从来没有出现过两个反斜杠:当JavaScript解析字符串常量时,这些反斜杠被删除,只留下了一个反斜杠。与您的问题毫无关系,但我强烈建议不要使用writeFileSync。如果流量很大,它可以完全锁定整个应用程序。实际上,它只适用于应用程序引导过程。