2011-02-09 2 views
10

Я пишу тестовый код в Ruby и пытаюсь проанализировать исходный HTML-файл веб-сайта. Он имеет переменную JavaScript, которую я могу использовать для сравнения с другими значениями. Например:Разбор Javascript с использованием кода 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> 

Здесь я хочу, чтобы извлечь переменную req_var из этой функции. Можно ли это сделать? Если так, пожалуйста, помогите мне с этим?

+0

У вас естьиспользовал тег Nokogiri, поэтому я не уверен, что вы подразумеваете под «извлечением переменной« req_var »из этой функции». Вам нужна помощь с помощью Nokogiri, чтобы найти этот блок сценариев? Что вы хотите получить из HTML, просто текст переменной с именем 'req_var'? Вы хотите преобразовать его в Ruby Hash? – Phrogz

+0

Я использую Nokogiri в том же коде, чтобы выполнить другой синтаксический анализ html. Поэтому, в идеале, если я смогу использовать Нокигири, было бы здорово. Если я смогу преобразовать его в рубиновый хеш, было бы здорово. – rubytester

ответ

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

Это может работать для некоторых очень ограниченных битов JavaScript, но, как правило, невозможно разобрать что-то вроде JavaScript-кода (или любого языка программирования) только с регулярным выражением. (Возможно, вы знаете, что @Pan Thomakos, конечно, но я набираю этот комментарий в интересах молодых, впечатлительных людей, которые могут прочитать ответ в ближайшие годы.) – Pointy

+2

Это правда, но это похоже на достаточно ограниченный случай , ему не нужно разбирать всю javascript-программу, ему нужны только значения между «var req_var =» и «;». –

+0

Спасибо, что помогает. – rubytester

Смежные вопросы