Javascript正则表达式对象和美元符号

4
在下面的代码中,我预期会得到 true,但实际上得到了 false。我错过了什么?
var text = "Sentence $confirmationlink$ fooo";     
alert(placeHolderExists(text,'confirmationlink'); // alerts false
function placeHolderExists(text,placeholdername) {  
  var pattern = new    RegExp('\$'+placeholdername+'\$');    
  return pattern.test(text);
}
4个回答

14

在正则表达式生成器中的“\”被视为转义字符,就像实际的正则表达式中一样。因此,您需要进行两次转义,尝试使用:

new RegExp('\\$'+placeholdername+'\\$');

如果Sergio只需要验证匹配是否存在,为什么要使用正则表达式呢?如果Sergio想要匹配的值,则应该使用正则表达式,但是仅仅验证匹配,则使用IndexOf更有效和不那么复杂...不是吗? - Dscoduc
1
别问我,我只是在这里工作而已。 (说真的,indexOf函数大约比正则表达式快2倍,但它不够灵活,我们正在讨论的是已经非常快的东西) - annakata

4
这种混淆是为什么你不应该使用正则表达式除非你真的需要的另一个例子。
return text.indexOf('$'+placeholdername+'$')!=-1;

...更简单、更快速,且在处理特殊字符时不会出错。


在这种情况下(原始问题),我会同意。由于您只是寻找真/假,因此instanceOf就足够了。但是,如果您想要匹配的值,则正则表达式将是正确的工具。 - Dscoduc

4

应该是

function placeHolderExists(text,placeholdername) {  
  var pattern = new    RegExp('\\$'+placeholdername+'\\$');    
  return pattern.test(text);
}

您需要对$符号进行双重转义

编辑:
annakata解释了原因。


1

将你的反斜杠加倍。

new RegExp('\\$'+placeholdername+'\\$');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接