如何在JavaScript中将匹配字符串作为变量运行?

如何在JavaScript中将匹配字符串作为变量运行?,javascript,jquery,Javascript,Jquery,我正在开发一个非常基本的模板系统,并且正在努力 拿这个来说: some useless text here but i want to replace %% this %% with the variable: object.this 这看起来很容易,但我想不出来。这是我的密码: function loadTemplate(element, object) { var regex = /%% (.*) %%/; return $(element).html().replace(

我正在开发一个非常基本的模板系统,并且正在努力

拿这个来说:

some useless text here but i want to replace %% this %% with the variable: object.this
这看起来很容易,但我想不出来。这是我的密码:

function loadTemplate(element, object) {
    var regex = /%% (.*) %%/;
    return $(element).html().replace(regex, eval("object.$1"));
}

我试过几种不同的方法。当前eval返回未定义的
。当我尝试
eval(“$1”)
时,它会给我一个未捕获的引用错误,并告诉我
$1
没有定义。

您不需要
eval
,因为
replace
使用回调函数;你的逻辑在那里。第一个参数是匹配的子字符串,第二个参数是第一个捕获组匹配。使用括号表示法,您可以使用字符串动态访问对象的键:

.replace(regex, function(_, a) {
  return object[a];
});

您不需要
eval
,因为
replace
使用回调函数;你的逻辑在那里。第一个参数是匹配的子字符串,第二个参数是第一个捕获组匹配。使用括号表示法,您可以使用字符串动态访问对象的键:

.replace(regex, function(_, a) {
  return object[a];
});

您不需要
eval
,因为
replace
使用回调函数;你的逻辑在那里。第一个参数是匹配的子字符串,第二个参数是第一个捕获组匹配。使用括号表示法,您可以使用字符串动态访问对象的键:

.replace(regex, function(_, a) {
  return object[a];
});

您不需要
eval
,因为
replace
使用回调函数;你的逻辑在那里。第一个参数是匹配的子字符串,第二个参数是第一个捕获组匹配。使用括号表示法,您可以使用字符串动态访问对象的键:

.replace(regex, function(_, a) {
  return object[a];
});


您不需要
eval
,因为
replace
使用回调函数;执行您的逻辑。@elclanrs,我使用
eval
将字符串作为变量运行。请看我的答案,您不需要它。您可以使用括号表示法。您不需要
eval
,因为
replace
使用回调函数;执行您的逻辑。@elclanrs,我使用
eval
将字符串作为变量运行。请看我的答案,您不需要它。您可以使用括号表示法。您不需要
eval
,因为
replace
使用回调函数;执行您的逻辑。@elclanrs,我使用
eval
将字符串作为变量运行。请看我的答案,您不需要它。您可以使用括号表示法。您不需要
eval
,因为
replace
使用回调函数;执行您的逻辑。@elclanrs,我使用
eval
将字符串作为变量运行。请看我的答案,您不需要它。你可以用括号表示法。也许我真的很差劲,但它仍然返回“undefined”,尽管我知道它匹配的是正确的东西。另外,
.replace(regex,object[“$1”]
是否与您的答案相同?不一样。替换标记以字符串形式传递给
replace
方法。这并不意味着您可以在任何字符串中使用它们。
replace
的第二个参数是字符串或函数。
object[“$1”]
将在
对象
中查找键
$1
,而不是您需要的。好的,这是有意义的。也可以忽略我之前关于它返回未定义的评论。这很好。谢谢!编辑:仍然需要等待2分钟才能接受您的回答也许我真的很糟糕,但它仍然返回“未定义”,虽然我知道它与正确的东西匹配。而且,
.replace(regex,object[“$1”]
与您的答案相同吗?不一样。替换令牌以字符串形式传递给
replace
方法。这并不意味着您可以在任何字符串中使用它们。
replace
的第二个参数是字符串或函数。
对象[“$1”]
将在
对象
中查找键
$1
,而不是您需要的。好的,这是有意义的。也可以忽略我之前关于它返回未定义的评论。这很好。谢谢!编辑:仍然需要等待2分钟才能接受您的回答也许我真的很糟糕,但它仍然返回“未定义”,虽然我知道它与正确的东西匹配。而且,
.replace(regex,object[“$1”]
与您的答案相同吗?不一样。替换令牌以字符串形式传递给
replace
方法。这并不意味着您可以在任何字符串中使用它们。
replace
的第二个参数是字符串或函数。
对象[“$1”]
将在
对象
中查找键
$1
,而不是您需要的。好的,这是有意义的。也可以忽略我之前关于它返回未定义的评论。这很好。谢谢!编辑:仍然需要等待2分钟才能接受您的回答也许我真的很糟糕,但它仍然返回“未定义”,虽然我知道它与正确的东西匹配。而且,
.replace(regex,object[“$1”]
与您的答案相同吗?不一样。替换令牌以字符串形式传递给
replace
方法。这并不意味着您可以在任何字符串中使用它们。
replace
的第二个参数是字符串或函数。
对象[“$1”]
将在
对象
中查找键
$1
,而不是您需要的。好的,这是有意义的。也可以忽略我之前关于它返回未定义的评论。这非常有效。谢谢!-编辑:仍然需要等待2分钟才能接受您的答案