2011-02-09 8 views
10

का उपयोग कर जावास्क्रिप्ट पार्सिंग मैं रूबी में एक टेस्ट कोड लिख रहा हूं और वेबसाइट की HTML स्रोत फ़ाइल को पार्स करने का प्रयास कर रहा हूं। इसमें एक जावास्क्रिप्ट चर है जिसका उपयोग मैं अन्य मूल्यों के साथ तुलना करने के लिए कर सकता हूं। उदाहरण के लिए:रूबी कोड

<script type="text/javascript" language="JavaScript"> 
    function GetParam(name) { 
    var req_var = { 
     a: 'xyz', 
     b: 'yy.com', 
     c: 'en', 
     d:0, 
     e: 'y' 
    }; 
    } 
</script> 

यहाँ मैं इस समारोह से चर req_var निकालना चाहते हैं। क्या यह करना मुमकिन है? यदि ऐसा है तो कृपया कोई मेरी मदद कर सकता है?

+0

आपके पासNokogiri टैग का उपयोग किया, तो मुझे यकीन नहीं है कि "इस कार्य से परिवर्तनीय' req_var' निकालें "का क्या मतलब है। क्या आपको इस स्क्रिप्ट ब्लॉक को खोजने के लिए नोकोगिरी का उपयोग करने में मदद चाहिए? आप एचटीएमएल से क्या प्राप्त करना चाहते हैं, सिर्फ 'req_var' नामक चर का पाठ? क्या आप इसे रूबी हैश में बदलना चाहते हैं? – Phrogz

+0

मैं कुछ अन्य एचटीएमएल पार्सिंग करने के लिए उसी कोड में नोकोगिरी का उपयोग कर रहा हूं। तो, आदर्श रूप में अगर मैं नोकोगिरी का उपयोग कर सकता हूं, तो यह बहुत अच्छा होगा। अगर मैं इसे रूबी हैश में बदल सकता हूं तो यह बहुत अच्छा होगा। – rubytester

उत्तर

8

माणिक में जावास्क्रिप्ट पार्सर

+0

इनमें से, rkelly सबसे हाल ही में अद्यतन किया गया है। –

4

आप इस तरह इसे बाहर पार्स करने के लिए रेगुलर एक्सप्रेशन का उपयोग कर सकते हैं:

 
k = "function GetParam(name) { var req_var = { a: 'xyz' , b: 'yy.com' , c: 'en' , d:0 , e: 'y'}; }" 
variable = k.match(/var\s+req_var\s+=\s+(.*?);/m)[1] 
p variable 

=> "{ a: 'xyz' , b: 'yy.com' , c: 'en' , d:0 , e: 'y'}" 
+0

यह जावास्क्रिप्ट के कुछ बहुत ही सीमित बिट्स के लिए काम कर सकता है, लेकिन सामान्य रूप से एक नियमित अभिव्यक्ति के साथ जावास्क्रिप्ट कोड (या किसी भी प्रोग्रामिंग भाषा) जैसे कुछ को पार्स करना आम तौर पर संभव नहीं है। (आप जान सकते हैं कि @ पैन थॉमकोस, ज़ाहिर है, लेकिन मैं इस टिप्पणी को युवा, प्रभावशाली लोगों के लाभ के लिए लिख रहा हूं जो आने वाले सालों में जवाब पढ़ सकते हैं।) – Pointy

+2

यह सच है, लेकिन यह एक सीमित मामला जैसा लगता है , उसे एक संपूर्ण जावास्क्रिप्ट प्रोग्राम को पार्स करने की आवश्यकता नहीं है, उसे केवल 'var req_var =' और ';' के बीच के मानों की आवश्यकता है। –

+0

धन्यवाद जो मदद करता है। – rubytester