如何用Ruby解析Javascript中的参数?

时间:2016-05-14 18:29:48

标签: ruby parsing web-scraping

我正在使用Nokogiri从文档中获取JS字符串。结果字符串如下:

js => "/* <![CDATA[ */\n\tvar _cf_map_init_1234567890=function()\n\t{\n\t\tvar _cf_map=ColdFusion.Map.init('Foo Bar',123.0,456.0,'map',6,null,true,true,false,true,true,true,false,false,true,false,'basic','small',null,'42.814001','-73.981458',null,null,null,[{name: 'Baz\\'s',latitude: 42.814001,longitude: -73.981458,markercolor:'#FF0000',showmarkerwindow:true,markerwindowcontent:'Baz\\'s <br /> 123 Sesame Street  <br /> Schenectady, NY <br /> ',tip: ''}],null,null,false,null,null);\n\t};ColdFusion.Event.registerOnLoad(_cf_map_init_1234567890);\n/* ]]> */" 

然后我使用rkelly-remix来解析JS。

parser = RKelly::Parser.new
ast = parser.parse(js)

ast.to_ecma会产生以下结果:

var _cf_map_init_1234567890 = function() {
  var _cf_map = ColdFusion.Map.init('Foo Bar', 123.0, 456.0, 'map', 6, null, true, true, false, true, true, true, false, false, true, false, 'basic', 'small', null, '42.814001', '-73.981458', null, null, null, [{
    name: 'Baz\'s',
    latitude: 42.814001,
    longitude: -73.981458,
    markercolor: '#FF0000',
    showmarkerwindow: true,
    markerwindowcontent: 'Baz\'s <br /> 123 Sesame Street  <br /> Schenectady, NY <br /> ',
    tip: ''
}], null, null, false, null, null);
};
ColdFusion.Event.registerOnLoad(_cf_map_init_1234567890);

我真正想要摆脱的只有价值123 Sesame Street, Schenectady, NY。但是我应该能够处理字符串解析,如果我可以将参数数组(或参数,如果这是一个更好的术语)传递给ColdFusion.Map.init

当我尝试使用rkelly的解析结果迭代每个节点时,我收到调用.name.value的错误,所以我被困在那里。

ast.each do |node|
  puts node.name
end

=> NoMethodError: undefined method 'name' for #<RKelly::Nodes::SourceElementsNode:0x007fc375dcdf30>

JSON.parse(ast.to_ecma.to_json)

=> JSON::ParserError: 757: unexpected token at...

感谢您的任何建议。

0 个答案:

没有答案