告诉正则表达式不要做它应该做的事。 (不要替换 $&)

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/, "$$&")

另见:The spec, section 15.5.4.11.

除非我误解了整个工作流程,否则 $$ 似乎可行:

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 + ")()"));