告诉正则表达式不要做它应该做的事。 (不要替换 $&)
Tell regex to not do what it's supposed to. (Don't replace $&)
所以我有一个用于测试的预处理器,它可以替换注释以以 DRY 方式构建自动化测试。它生成的文件可以正常 运行。唯一的问题出现在我需要在测试步骤中使用正则表达式时,如下所示:
.step(/^Search for special characters$/, function() {
client.setValue("input[type=text]", "@#$%^&*()_ -={}[]|\\"':;? >.<,`©®ÉÖ]]™\"".replace(/[-[\]{}()*+?.,\^$|"'#\s]/g, "\$&")
}
当然,我最终得到的是一个如下所示的测试文件:
client.setValue("input[type=text]", "@#$%^&*()_ -={}[]|\\"':;? >.<,`©®ÉÖ]]™\"".replace(/[-[\]{}()*+?.,\^$|"'#\s]/g, "\//Search for special characters")
有没有办法告诉javascript"DON'T replace $& with the match result!"?
.replace()
函数替换(插入)以 $
开头的内容。所以 $
是你需要转义的字符,因为反斜杠仍然是 JS 字符串本身的转义机制。
这是通过将它加倍来实现的:
"foo".replace(/foo/, "$$&")
除非我误解了整个工作流程,否则 $$
似乎可行:
txt = '123';
step = function(re, fn) {
return txt.replace(re, fn.toString());
}
code = step(/^123$/, function() {
return "abc".replace(/./g, "$$&")
});
document.write(code);
document.write("<br>");
document.write(eval("(" + code + ")()"));
所以我有一个用于测试的预处理器,它可以替换注释以以 DRY 方式构建自动化测试。它生成的文件可以正常 运行。唯一的问题出现在我需要在测试步骤中使用正则表达式时,如下所示:
.step(/^Search for special characters$/, function() {
client.setValue("input[type=text]", "@#$%^&*()_ -={}[]|\\"':;? >.<,`©®ÉÖ]]™\"".replace(/[-[\]{}()*+?.,\^$|"'#\s]/g, "\$&")
}
当然,我最终得到的是一个如下所示的测试文件:
client.setValue("input[type=text]", "@#$%^&*()_ -={}[]|\\"':;? >.<,`©®ÉÖ]]™\"".replace(/[-[\]{}()*+?.,\^$|"'#\s]/g, "\//Search for special characters")
有没有办法告诉javascript"DON'T replace $& with the match result!"?
.replace()
函数替换(插入)以 $
开头的内容。所以 $
是你需要转义的字符,因为反斜杠仍然是 JS 字符串本身的转义机制。
这是通过将它加倍来实现的:
"foo".replace(/foo/, "$$&")
除非我误解了整个工作流程,否则 $$
似乎可行:
txt = '123';
step = function(re, fn) {
return txt.replace(re, fn.toString());
}
code = step(/^123$/, function() {
return "abc".replace(/./g, "$$&")
});
document.write(code);
document.write("<br>");
document.write(eval("(" + code + ")()"));