如何在 JavaScript 中获取函数体文本
How to get function body text in JavaScript?
function derp() { a(); b(); c(); }
derp.toString()
将返回 "function derp() { a(); b(); c(); }"
,但我只需要函数的主体,所以"a(); b(); c();"
,因为我可以计算表达式。是否可以以跨浏览器的方式执行此操作?
var entire = derp.toString();
var body = entire.slice(entire.indexOf("{") + 1, entire.lastIndexOf("}"));
console.log(body); // "a(); b(); c();"
请使用搜索,这是这个问题的重复
由于您希望在前{
和最后}
之间显示文本:
derp.toString().replace(/^[^{]*{'s*/,'').replace(/'s*}[^}]*$/,'');
请注意,我将替换分解为正则表达式,而不是一个涵盖整个事情的正则表达式(.replace(/^[^{]*{'s*(['d'D]*)'s*}[^}]*$/,'$1')
(,因为它的内存密集度要低得多。
注意:接受的答案取决于解释器不会做疯狂的事情,例如在"函数"和"{"之间抛出注释。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"}"
一个单行的简短正则表达式示例:
var body = f.toString().match(/^[^{]+'{(.*?)'}$/)[1];
如果你想最终eval
脚本,并假设函数不带参数,这应该快一点:
var body = '(' + f.toString() + ')()';
你需要这样的东西:
var content = derp.toString();
var body = content.match(/{['w'W]*}/);
body = body.slice(1, body.length - 1);
console.log(body); // a(); b(); c();
相关文章:
- Javascript:如何获取函数.apply()的键
- 如何在 JavaScript 中获取函数体文本
- Javascript重新定义和覆盖现有的函数体
- 为什么可以'我们在函数体中为函数对象添加属性,就像在javascript中为对象文字添加属性一样
- 从函数内部获取函数的名称
- 从字符串的 JS 函数中获取函数参数
- 获取函数中按钮的名称
- 在运行时将代码插入函数体
- 在其参数中获取函数本身
- 如何获取函数元素中的值
- 获取函数原型的源代码
- javascript:获取函数's变量's在另一个函数中的值
- 无法获取函数的ajax回调
- 从函数体参数中获取值
- Javascript通过名称获取函数
- 如何获取函数参数值
- 使用Rhino从已评估的JS中获取函数名及其参数
- 在JavaScript中获取函数体
- 使用c#从JavaScript文件中获取函数名和函数体代码
- Regex获取脚本函数体