我想知道如何将函数的主体转换为字符串?
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???
答案 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)