假设我有这个字符串
"examples\output\$projectname$\$projectname$.csproj"
我想用一些字符串替换$ projectname $的所有出现。例如。用TEST替换它应该产生:
"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"
为什么会发生这种情况?如何防止这种情况发生?
答案 0 :(得分:2)
首先,反斜杠并不存在:
// Prints "examplesoutput$projectname$$projectname$.csproj":
console.log("examples\output\$projectname$\$projectname$.csproj");
您需要转义给定字符串文字中的反斜杠。字符串文字"\$"
将评估为"$"
。但字符串文字"\\$"
将评估为"\$"
:
var path = "examples\\output\\$projectname$\\$projectname$.csproj".replace(new RegExp("\\$projectname\\$", "g"), "TEST");
console.log(path); // "examples\output\TEST\TEST.csproj"
答案 1 :(得分:2)
在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")