【问题标题】:Nodejs adding extra backslash(\) in string [duplicate]Nodejs在字符串中添加额外的反斜杠(\)[重复]
【发布时间】:2021-07-26 15:22:19
【问题描述】:

我正在尝试这个示例代码

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+)$' ] }

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

【问题讨论】:

  • 您好,欢迎来到 StackOverflow。您能否提供一个可重现的示例?
  • 我已经提供了代码示例。 convertStr1 输出就像 /(?\S+)$/search/v1/(?\S+)$ 一样好,但我只是将字符串分配给路由对象,结果变成 /(?\\S+ )$/search/v1/(?\\S+)$ \\S 现在追加
  • 抱歉,不知什么原因,我以为遗漏了什么。

标签: node.js regex escaping regexp-replace


【解决方案1】:

反斜杠也是转义字符。在你的字面上,"&gt;\\S+)$",第一个转义第二个。这意味着"\\" 都定义了\ 的单个字面字符。

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

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

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

【讨论】:

  • 我的问题是当我将路由对象写入文件时,然后在文件“\\”中写入文件而不是“\”。在文件中包含“\”对我来说很重要。我该如何解决?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 2023-04-04
    • 2021-03-15
    • 1970-01-01
    • 2013-01-24
    相关资源
    最近更新 更多