Nodejs 在字符串中添加额外的反斜杠(\)

Nodejs adding extra backslash(\) in string

我正在尝试这个示例代码

let route = {
                paths: []
            }
            
let convertedStr0 = "/{test}/search/v1/{userId}"

let convertedStr1 = convertedStr0.replace(new RegExp("{", 'g'), "(?<").replace(new RegExp("}", 'g'), ">\S+)$");

console.log(convertedStr1);  //Output: /(?<test>\S+)$/search/v1/(?<userId>\S+)$

route.paths[0] = convertedStr1;
console.log(route); //Output: { paths: [ '/(?<test>\S+)$/search/v1/(?<userId>\S+)$' ] }

我需要将路由结果写入一个带有单个反斜杠的文件中 (\)。但是附加了一个额外的反斜杠。有人对我如何解决这个问题有什么建议吗?

反斜杠也是转义字符。在您的字面字符串中,">\S+)$",第一个转义第二个。这意味着 "\" 定义了 \.

的单个字面字符

在第一个 console.log 中,您的输出是一个字符序列。在字符术语中,您的字符串中只定义了一个反斜杠。

在第二个 console.log 中,您的输出是序列的字符串表示形式。所以有双反斜杠,代表一个转义另一个。

另请注意,第一个输出没有像第二种情况那样用单引号引起来。

如果您想在输出文件中保留单个反斜杠,首先 stringify 您的 route 对象,然后将双斜杠替换为单个反斜杠:

route = JSON.stringify(route, null, 2)
            .replaceAll("\\","\");
console.log(route); //Output: { "paths": [ "/(?<test>\S+)$/search/v1/(?<userId>\S+)$" ] }