2011-02-09 46 views
10

Tôi đang viết mã thử nghiệm trong Ruby và cố gắng phân tích cú pháp tệp nguồn HTML của trang web. Nó có một biến JavaScript mà tôi có thể sử dụng để so sánh nó với các giá trị khác. Ví dụ:Phân tích cú pháp Javascript bằng mã 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> 

Ở đây tôi muốn trích xuất biến số req_var từ hàm này. Có thể làm điều đó không? Nếu có ai đó có thể giúp tôi với điều đó không?

+0

Bạn có sử dụng thẻ Nokogiri, vì vậy tôi không chắc chắn ý bạn là gì bằng cách "trích xuất biến' req_var' khỏi hàm này ". Bạn có cần trợ giúp bằng cách sử dụng Nokogiri để tìm khối tập lệnh này không? Bạn muốn lấy gì từ HTML, chỉ là văn bản của biến có tên 'req_var'? Bạn có muốn chuyển đổi nó thành Ruby Hash? – Phrogz

+0

Tôi đang sử dụng Nokogiri trong cùng một mã để thực hiện một số phân tích cú pháp html khác. Vì vậy, lý tưởng nếu tôi có thể sử dụng Nokogiri, nó sẽ rất tuyệt. Nếu tôi có thể chuyển đổi nó thành một băm ruby ​​nó sẽ là tuyệt vời. – rubytester

Trả lời

4

Bạn có thể sử dụng một biểu thức chính quy để phân tích nó ra như thế này:

 
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

Điều này có thể làm việc cho một số bit rất hạn chế của JavaScript, nhưng nó thường không thể phân tích cú pháp một cái gì đó như mã JavaScript (hoặc bất kỳ ngôn ngữ lập trình) chỉ với một biểu thức chính quy. (Bạn có thể biết rằng @Pan Thomakos, tất nhiên, nhưng tôi đang gõ nhận xét này vì lợi ích của những người trẻ tuổi, ấn tượng có thể đọc câu trả lời trong những năm tới.) – Pointy

+2

Đúng vậy, nhưng điều này có vẻ như một trường hợp đủ hạn chế , anh ta không cần phải phân tích cú pháp toàn bộ chương trình javascript, anh ta chỉ cần các giá trị giữa 'var req_var =' và ';'. –

+0

Cảm ơn bạn đã giúp. – rubytester

Các vấn đề liên quan