我非常清楚使用RegExp
对象来匹配JavaScript中的动态变量的标准方法。但是我对whitespacing有一些困难。
目标是在{{或}}和动态变量名之间可以有0个或更多的空格。
我试图反映的行为
var regex = /\{\{\s*name\s*\}\}/g;
var string = "Howdy, my name is {{ name}}";
string.replace(regex, "Chris")
// => "Howdy, my name is Chris"
我当前的代码
var keyName = "name";
var regex = new RegExp("\{\{\s*"+keyName+"\s*\}\}", "g");
var string = "Howdy, my name is {{ name}}";
string.replace(regex, "Chris")
// => "Howdy, my name is {{ name}}"
我错过了什么吗?感谢
答案 0 :(得分:1)
你错过了逃脱。替换这个:
new RegExp("\{\{\s*"+name+"\s*\}\}", "g");
有了这个:
new RegExp("\\{\\{\\s*"+name+"\\s*\\}\\}", "g");
你必须双重转义反斜杠,一次用于JS字符串,一次用于正则表达式。
这就是正则表达式文字/.../
背后的原因,你可以在这里使用......或者,也许你可以:
var regex = /\{\{\s*(\w+)\s*\}\}/g;
捕获所有内容,然后过滤掉结果。该名称位于第一个捕获的组中。
string.replace(regex, function(m, name) {
return "whatever " + name;
});
答案 1 :(得分:0)
您的代码将是,
> var keyName = "name";
> var regex = new RegExp("\\{\\{\\s*"+keyName+"\\s*\\}\\}", "g");
undefined
> var string = "Howdy, my name is {{ name}}";
undefined
> string.replace(regex, "Chris")
'Howdy, my name is Chris'
您需要在RegExp模式中包含存储值name
的变量,并且还需要再次转义\
,因为该模式包含在双引号中。