如何在JavaScript中获取函数体文本?

gre*_*pow 27 javascript function

function derp() { a(); b(); c(); }
Run Code Online (Sandbox Code Playgroud)

derp.toString()将返回"function derp() { a(); b(); c(); }",但我只需要函数的主体,因此"a(); b(); c();",因为我可以评估表达式.是否可以以跨浏览器的方式执行此操作?

div*_*ero 41

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

console.log(body); // "a(); b(); c();"
Run Code Online (Sandbox Code Playgroud)

请使用搜索,这是此问题的副本

  • 如果您发现重复,请将问题标记为重复,如果您重复使用其他答案,那么也请正确引用它们. (5认同)
  • 使用`.slice`.它是一样的,但不那么令人困惑. (2认同)

Nie*_*sol 7

当然,因为你想要第一个{和最后一个之间的文字}:

derp.toString().replace(/^[^{]*{\s*/,'').replace(/\s*}[^}]*$/,'');
Run Code Online (Sandbox Code Playgroud)

请注意,我将替换分解为正则表达式而不是覆盖整个事物的一个正则表达式(.replace(/^[^{]*{\s*([\d\D]*)\s*}[^}]*$/,'$1')),因为它的内存密集程度要低得多.