字符串如下:"foo('argument1','argument2')"
如何在不使用的情况下将该函数作为 javascript 执行eval
?我知道你可以使用
window[func](arguments)
,
但参数是字符串的一部分。我尝试使用正则表达式,但考虑到javascript没有lookbehinds,我不确定该怎么做。有什么建议么?
字符串如下:"foo('argument1','argument2')"
如何在不使用的情况下将该函数作为 javascript 执行eval
?我知道你可以使用
window[func](arguments)
,
但参数是字符串的一部分。我尝试使用正则表达式,但考虑到javascript没有lookbehinds,我不确定该怎么做。有什么建议么?
你可以使用这个:
var s = "foo('argument1','argument2', 5, true)";
var m = s.match(/([^(]+)\(([^)]+)\)/);
if (m) {
var f = window[m[1]];
var args = m[2].split(',').map(function(v){
return JSON.parse(v.trim().replace(/^'/,'"').replace(/'$/,'"'))
});
f.apply(null,args);
}
演示(打开控制台)
请注意,这仅适用于原始参数。如果你想在没有 eval 的情况下处理其他类型的参数,你最好定义你想要处理的类型。
有几种方法可以做到这一点,其中一种已经由dystroy给出。
一个稍微简单的方法是这样的:
var args = "foo('argument1','argument2')".split(/[()',]+/).slice(0,-1)
Function.prototype.call.apply(window[args[0]],args)