我有以下字符串,需要使用JS进行解析。
function () {\n MyClass.prototype.doSomethingFunction();\n 5-6 lines of coding\n }
我试着解析它,修剪空格和换行符,但对我来说都不起作用。请告诉我如何从上面的字符串中获取函数名(doSomethingFunction)。
我如何获得这个字符串:
我有一个存储函数的队列。稍后,我的代码从这个队列中选择一个函数(这里是一些逻辑)并执行它们。它对我来说完全没问题。但我只想打印出函数的名称!它就像'(classOBJ.myFunctionsQueuen)()‘用来执行一个函数,该函数存储在myFunctionsQueue数组的第n个位置。有意义还是我做错了什么?
谢谢曼恩
发布于 2012-10-11 22:42:04
尝试如下所示的reg表达式匹配
var str = "function() {\n MyClass.prototype.doSomethingFunction();\n 5 - 6 lines of coding\n}";
var matches = str.match(/prototype\.(.+?)\(\)/);
if(matches){
alert(matches[1]);
}
发布于 2012-10-11 22:47:42
首先,如果您正在执行存储为字符串的函数,您可能做错了(使用eval
或new Function(body)
)。不能使用对象作为队列,函数名作为键,函数引用(而不是字符串)作为值吗?如下所示:
var queue = {
"funcName" : function() { /* do something */ },
"otherFunc" : function() { /* do something else */ }
/* etc. */
};
然后您可以打印循环中的所有名称和execute all函数,例如:
for(var key in queue) {
console.log(key); // function name
queue[key](); // execute function
}
发布于 2012-10-11 22:49:17
我不认为这对于您的应用程序来说是正确的方法,但是当前的问题可以通过如下方式来解决
myFunctionString.split("\n").reduce(function(map, line) {
if (/^\s*[^\s[\]]+\(\);?\s*$/.test(line))
map.push(line.split(".").pop().replace(/\(\);?\s*$/, ""));
return map;
}, []);
// returns an array of invoked method names
https://stackoverflow.com/questions/12841946
复制相似问题