2013-02-14 9 views
8

関数の本体を文字列に変換する方法を知りたいですか?関数の本体を文字列として取得する方法は?

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??? 
+3

私は*なぜこれをやっているのですか? –

+0

何かをカスタマイズしたい... – Till

+2

何をカスタマイズしますか?何に応じて?どのような効果に? –

答えて

22

あなたは醜い何かをやろうとしている場合は、正規表現でそれを行う:

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

ありがとうございました!!!正規表現を使用する方法について、参考サイトで優れた教え方を教えてもらえますか? – Till

+6

私はOPがやっていることに同意しませんが、私はそれに同意します: 'もしあなたが何か醜い(あなたも同様に)正規表現でやることにしようとしています。 = D –

+0

@Till:http://www.regular-expressions.info/tutorial.html – Bergi

2

をあなただけの機能を文字列化し、他のすべてを削除することで、本体を取り出すことができます:

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

しかし、これを実行する正当な理由はなく、実際にはすべての環境でtoStringが機能しません。

+0

ありがとう! – Till

+0

またはより簡潔に: f.toString()。replace(/(^。\ {| \} $)/ g、 "") –

+0

これは '()=> {{}のように定義された関数では機能しません。 '。 toString()。replace(/^function \ s * \ S + \ s * \([^)] * \)\例:このコードを実行すると、 – MattClimbs

関連する問題