在下面的代码中。我期待的是真的,但我却变得虚假了。我错过了什么?
var text = "Sentence $confirmationlink$ fooo";
alert(placeHolderExists(text,'confirmationlink'); // alerts false
function placeHolderExists(text,placeholdername) {
var pattern = new RegExp('\$'+placeholdername+'\$');
return pattern.test(text);
}
答案 0 :(得分:11)
在构建字符串时,RegExp表达式构建器中的“\”被视为转义字符,就像在实际的RegExp中一样。你需要逃脱两次,试试:
new RegExp('\\$'+placeholdername+'\\$');
答案 1 :(得分:4)
应该是
function placeHolderExists(text,placeholdername) {
var pattern = new RegExp('\\$'+placeholdername+'\\$');
return pattern.test(text);
}
你需要双倍逃避你的$ sign
编辑:
annakata解释了原因。
答案 2 :(得分:3)
这种混淆是你不应该使用正则表达式的另一个例子,除非你真的需要。
return text.indexOf('$'+placeholdername+'$')!=-1;
...更简单,更快捷,并且当你有滑稽的角色时不会摔倒。
答案 3 :(得分:1)
加倍你的斜杠。
new RegExp('\\$'+placeholdername+'\\$');