2011-02-09 15 views
10

Sto scrivendo un codice di prova in Ruby e sto provando ad analizzare un file sorgente HTML di un sito web. Ha una variabile JavaScript che posso usare per confrontarla con altri valori. Per esempio:Parsing Javascript using Ruby code

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

Qui voglio estrarre la variabile req_var da questa funzione. è possibile farlo? Se è così, per favore qualcuno può aiutarmi?

+0

Haiho usato il tag Nokogiri, quindi non sono sicuro di cosa intendi con "estrai la variabile' req_var' da questa funzione ". Hai bisogno di aiuto con Nokogiri per trovare questo blocco di script? Cosa vuoi ottenere dall'HTML, solo il testo della variabile chiamata 'req_var'? Vuoi convertirlo in un Ruby Hash? – Phrogz

+0

Sto usando Nokogiri nello stesso codice per fare qualche altra analisi html. Quindi, idealmente se posso usare Nokogiri, sarebbe fantastico. Se riesco a convertirlo in un hash rubino sarebbe fantastico. – rubytester

risposta

4

Si potrebbe usare un'espressione regolare per analizzare fuori in questo modo:

 
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

Questo potrebbe funzionare per alcuni bit di JavaScript molto limitati, ma in genere non è possibile analizzare qualcosa come il codice JavaScript (o qualsiasi linguaggio di programmazione) con un'espressione regolare. (Potresti sapere che @Pan Thomakos, naturalmente, ma sto scrivendo questo commento a beneficio di persone giovani e impressionabili che potrebbero leggere la risposta negli anni a venire.) – Pointy

+2

È vero, ma questo sembra un caso abbastanza limitato , non ha bisogno di analizzare un intero programma javascript, ha solo bisogno dei valori tra 'var req_var =' e ';'. –

+0

Grazie che aiuta. – rubytester