1

字符串如下:"foo('argument1','argument2')"

如何在不使用的情况下将该函数作为 javascript 执行eval?我知道你可以使用

window[func](arguments),

但参数是字符串的一部分。我尝试使用正则表达式,但考虑到javascript没有lookbehinds,我不确定该怎么做。有什么建议么?

4

2 回答 2

1

你可以使用这个:

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 的情况下处理其他类型的参数,你最好定义你想要处理的类型。

于 2013-07-05T19:07:46.787 回答
0

有几种方法可以做到这一点,其中一种已经由dystroy给出。

一个稍微简单的方法是这样的:

var args = "foo('argument1','argument2')".split(/[()',]+/).slice(0,-1)
Function.prototype.call.apply(window[args[0]],args)
于 2013-07-05T19:33:49.820 回答