1

我有以下需要使用 JS 解析的字符串。

function () {\n     MyClass.prototype.doSomethingFunction();\n       5-6 lines of coding\n  }

我尝试解析它,修剪空格和换行符,但对我没有任何帮助。请让我知道如何从上面的字符串中获取函数名称(doSomethingFunction)。

我如何得到这个字符串:

我有一个存储我的函数的队列。稍后我的代码会从这个队列中选择一个函数(这里有一些逻辑)并执行它们。它对我来说完全没问题。但我只想打印出函数的名称!就像 '(classOBJ.myFunctionsQueue[n])()' 用于执行存储在 myFunctionsQueue 数组中的第 n 个位置的函数。有道理还是我在这里做错了什么?

谢谢曼

4

3 回答 3

2

尝试像这样匹配的 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-11T14:42:04.203 回答
0

首先,如果您正在执行存储为字符串的函数,您可能做错了(使用evalor new Function(body))。你不能使用一个对象作为队列,函数名作为键,函数引用(不是字符串)作为值吗?像这样:

var queue = {
    "funcName" : function() { /* do something */ },
    "otherFunc" : function() { /* do something else */ }
    /* etc. */
};

然后您可以打印所有名称并从循环中执行所有函数,例如:

for(var key in queue) {
    console.log(key); // function name
    queue[key]();     // execute function
}
于 2012-10-11T14:47:41.713 回答
0

我认为这不是您的应用程序的正确方法,但是当前的问题可以通过类似的方法来解决

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
于 2012-10-11T14:49:17.457 回答