Javascript 为什么这个RegExp在String.replace中删除我的反斜杠?

Javascript 为什么这个RegExp在String.replace中删除我的反斜杠?,javascript,regex,escaping,Javascript,Regex,Escaping,假设我有这根绳子 "examples\output\$projectname$\$projectname$.csproj" 我想用一些字符串替换所有出现的$projectname$。例如,将其替换为测试应产生: "examples\output\TEST\TEST.csproj" 我最接近实现这一目标的是: ("examples\output\$projectname$\$projectname$.csproj") .replace(new RegExp("\\$projectnam

假设我有这根绳子

"examples\output\$projectname$\$projectname$.csproj"
我想用一些字符串替换所有出现的$projectname$。例如,将其替换为测试应产生:

"examples\output\TEST\TEST.csproj"
我最接近实现这一目标的是:

("examples\output\$projectname$\$projectname$.csproj")
    .replace(new RegExp("\\$projectname\\$", "g"), "TEST");
这将产生:

"examplesoutputTESTTEST.csproj"
即使在写作的时候

("examples\output\$projectname$\$projectname$.csproj")
    .replace(new RegExp("output", "g"), "TEST");
…这仍将删除反斜杠

"examplesTEST$projectname$$projectname$.csproj"

为什么会发生这种情况?如何防止这种情况发生?

反斜杠根本就不存在:

//打印示例输出$projectname$$projectname$.csproj:
console.logexamples\output\$projectname$\$projectname$.csproj 反斜杠根本就不存在:

//打印示例输出$projectname$$projectname$.csproj:
console.logexamples\output\$projectname$\$projectname$.csproj 与许多其他语言一样,在JavaScript中,文本字符串中的反斜杠充当转义字符,保留后面的字符;结果是斜线消失了。这意味着您的字符串写为:

"examples\output\$projectname$\$projectname$.csproj"
被解释为

"examplesoutput$projectname$$projectname$.csproj"
您需要使用反斜杠来转义反斜杠:

"examples\\output\\$projectname$\\$projectname$.csproj"
请注意,例如,如果从返回Windows文件路径的API中有一个带有单反斜杠的字符串,则反斜杠已经是该字符串的一部分,因此不需要对其进行处理以转义现有斜杠

回到原始代码,您不需要创建新的RegExp对象。Javascript支持正则表达式文本。所以你可以写:

"examples\\output\\$projectname$\\$projectname$.csproj"
.replace(/\$projectname\$/g, "TEST")

与许多其他语言一样,在JavaScript中,文本字符串中的反斜杠充当转义字符,保留后面的字符;结果是斜线消失了。这意味着您的字符串写为:

"examples\output\$projectname$\$projectname$.csproj"
被解释为

"examplesoutput$projectname$$projectname$.csproj"
您需要使用反斜杠来转义反斜杠:

"examples\\output\\$projectname$\\$projectname$.csproj"
请注意,例如,如果从返回Windows文件路径的API中有一个带有单反斜杠的字符串,则反斜杠已经是该字符串的一部分,因此不需要对其进行处理以转义现有斜杠

回到原始代码,您不需要创建新的RegExp对象。Javascript支持正则表达式文本。所以你可以写:

"examples\\output\\$projectname$\\$projectname$.csproj"
.replace(/\$projectname\$/g, "TEST")

我可能错了,但我认为你需要在反斜杠前面放一个转义字符/不是正则表达式,只是你的初始字符串错了。我可能错了,但我认为你需要在反斜杠前面放一个转义字符/不是正则表达式,只是你的初始字符串错了。谢谢。我的第一个解决方案和您的一样,确实适用于路径位于变量中的代码。我只是忘记在我的测试设置中转义字符串文本中的反斜杠。非常感谢。我的第一个解决方案和您的一样,确实适用于路径位于变量中的代码。我只是忘记在我的测试设置中转义字符串文本中的反斜杠。