2011-02-09 44 views
10

Estoy escribiendo un código de prueba en Ruby y tratando de analizar un archivo fuente HTML de un sitio web. Tiene una variable de JavaScript que puedo usar para compararla con otros valores. Por ejemplo:Analizando Javascript usando el código Ruby

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

Aquí quiero extraer la variable req_var de esta función. ¿Es posible hacer eso? Si es así, ¿alguien puede ayudarme con eso?

+0

Tienes usé la etiqueta Nokogiri, así que no estoy seguro de lo que quiere decir con "extraer la variable 'req_var' de esta función". ¿Necesitas ayuda para usar Nokogiri para encontrar este bloque de scripts? ¿Qué quieres obtener del HTML, solo el texto de la variable llamada 'req_var'? ¿Quieres convertirlo en un Ruby Hash? – Phrogz

+0

Estoy usando Nokogiri en el mismo código para hacer otro análisis html. Entonces, idealmente, si puedo usar Nokogiri, sería genial. Si puedo convertirlo en un hash de rubí sería genial. – rubytester

Respuesta

4

Se podría utilizar una expresión regular para analizar hacia fuera como esto:

 
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

Esto podría funcionar para algunos bits de JavaScript muy restringidos, pero generalmente no es posible analizar algo como el código JavaScript (o cualquier lenguaje de programación) con solo una expresión regular. (Puede que sepa que @Pan Thomakos, por supuesto, pero estoy escribiendo este comentario para beneficio de personas jóvenes e impresionables que pueden leer la respuesta en los próximos años). – Pointy

+2

Eso es cierto, pero esto parece ser un caso bastante limitado , no necesita analizar un programa completo de JavaScript, solo necesita los valores entre 'var req_var =' y ';'. –

+0

Gracias que ayuda. – rubytester