2013-02-14 10 views
8

Chcę wiedzieć, jak przekonwertować ciało funkcji na ciąg znaków?Jak uzyskać treść funkcji jako ciąg?

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

Czy mogę zapytać * dlaczego * robisz to? –

+0

Chcę dostosować coś ... – Till

+2

Co chcesz dostosować? W odpowiedzi na co? Do jakiego skutku? –

Odpowiedz

22

Jeśli masz zamiar zrobić coś brzydkiego, zrób to z regex:

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

dziękuję bardzo !!! Czy mogę również poprosić o jakieś referencje, które dają dobre nauczanie na temat używania regex ?? – Till

+6

Nie zgadzam się z tym, co robi OP, ale zgadzam się, że: "jeśli zamierzasz zrobić coś brzydkiego (możesz równie dobrze) zrób to za pomocą regex". = D –

+0

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

2

Można tylko stringify funkcję i ekstrakt z organizmu poprzez usunięcie wszystkiego innego:

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

Nie ma jednak powodu, aby to robić, a toString w rzeczywistości nie działa we wszystkich środowiskach.

+0

dziękuję bardzo! – Till

+0

Lub bardziej zwięźle: f.toString(). Replace (/ (^. *? \ {| \} $)/G, "") –

+0

To nie działa dla funkcji zdefiniowanych jak '() => {} '. Uruchom ten kod na przykład '(() => {console.log (1);}). ToString(). Replace (/^function \ s * \ S + \ s * \ ([^)] * \) \ s * \ {| \} $/g, ""); ' – MattClimbs

Powiązane problemy