36
function derp() { a(); b(); c(); }

derp.toString()が返さ"function derp() { a(); b(); c(); }"れますが、関数の本体のみが必要なので"a(); b(); c();"、式を評価できるためです。クロスブラウザでこれを行うことは可能ですか?

4

5 に答える 5

54
var entire = derp.toString(); 
var body = entire.slice(entire.indexOf("{") + 1, entire.lastIndexOf("}"));

console.log(body); // "a(); b(); c();"

検索を使用してください。これはこの質問の複製です

于 2012-09-01T12:34:02.250 に答える
9

{firstと last の間のテキストが必要なので}:

derp.toString().replace(/^[^{]*{\s*/,'').replace(/\s*}[^}]*$/,'');

1 つの正規表現ですべてをカバーするのではなく ( )、置換を正規表現に分割したことに注意してください.replace(/^[^{]*{\s*([\d\D]*)\s*}[^}]*$/,'$1')

于 2012-09-01T12:34:55.873 に答える
4

注: 受け入れられる答えは、インタプリタが「関数」と「{」の間でコメントを返すなどのクレイジーなことをしないことに依存します。IE8 は喜んでこれを行います:

>>var x = function /* this is a counter-example { */ () {return "of the genre"};
>>x.toString();
"function /* this is a counter-example { */ () {return "of the genre"}"
于 2013-09-05T23:57:42.697 に答える
2

次のようなものが必要です。

var content = derp.toString();
var body = content.match(/{[\w\W]*}/);
body = body.slice(1, body.length - 1);

console.log(body); // a(); b(); c();
于 2012-09-01T12:41:42.227 に答える