我正在使用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...
感谢您的任何建议。