用JavaScript替换正则表达式空格

时间:2014-09-15 17:41:22

标签: javascript regex

我非常清楚使用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}}"

我错过了什么吗?感谢

2 个答案:

答案 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的变量,并且还需要再次转义\,因为该模式包含在双引号中。