如何将函数的主体作为字符串?

时间:2013-02-14 23:32:51

标签: javascript function

我想知道如何将函数的主体转换为字符串?

function A(){
  alert(1);
}

output = eval(A).toString() // this will come with  function A(){  ~ }

//output of output -> function A(){ alert(1); }

//How can I make output into alert(1); only???

4 个答案:

答案 0 :(得分:26)

如果你要做一些丑陋的事,可以用正则表达式来做:

A.toString().match(/function[^{]+\{([\s\S]*)\}$/)[1];

答案 1 :(得分:2)

您可以通过删除其他所有内容来对函数进行字符串化并提取正文:

A.toString().replace(/^function\s*\S+\s*\([^)]*\)\s*\{|\}$/g, "");

但是,没有充分理由这样做,toString实际上并不适用于所有环境。

答案 2 :(得分:2)

不要使用正则表达式。

const getBody = (string) => {
  const bodyStart = string.indexOf("{") + 1
  const bodyEnd = string.lastIndexOf("}")
  return string.substring(bodyStart, bodyEnd)
}

const f = () => { return 'yo' }
const g = function (some, params) { return 'hi' }

console.log(getBody(f.toString()))
console.log(getBody(g.toString()))

答案 3 :(得分:0)

当前,开发人员在新版本的Ecmascript中使用箭头功能

因此,我想分享the answer here which is the answer of Frank

uniq

原始question here