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

それがあなたのアプリケーションにとって正しいアプローチだとは思いませんが、現在の問題は次のような方法で解決できます

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 に答える
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 に答える