fs.writeFileSync不会使用转义反斜杠写

时间:2017-08-10 20:17:24

标签: 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, outputString, 'utf-8');

输出结果为:

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

是否有一些选项可以传递给fs.writeFileSync以保持字符串中的所有字符都写入文件?

我意识到一个解决方案可能涉及使用类似js-string-escape的库转义此字符串中的所有可能字符,但由于这些特定字符串代表正则表达式,所以真的安全吗?我不想以任何方式改变它们或它们的功能。

注意:我意识到这个输出并不是真正有效的JavaScript,但它是我真正想要做的一个有点人为的例子。这段小代码最能说明手头的问题。

1 个答案:

答案 0 :(得分:1)

如果你想在outputString中有两个反斜杠,那么就会有四个反斜杠。 例:

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}

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