Ruby on rails 使用Nokogiri-Ruby/Rails从脚本中提取变量值

Ruby on rails 使用Nokogiri-Ruby/Rails从脚本中提取变量值,ruby-on-rails,ruby,nokogiri,Ruby On Rails,Ruby,Nokogiri,我有一段代码,它把所有的脚本都放在一个页面上 full_url = URI.join(url, "/").to_s #https://www.example.com doc = Nokogiri::HTML(URI.open(full_url)) doc.css('script').each do |script| puts script.content end 这非常有效,可以返回页面上的所有脚本。然而,这使得它比需要的更复杂,因为我只需要一个脚本,一个带有类

我有一段代码,它把所有的脚本都放在一个页面上

full_url = URI.join(url, "/").to_s #https://www.example.com

doc = Nokogiri::HTML(URI.open(full_url))

doc.css('script').each do |script|
    puts script.content
end
这非常有效,可以返回页面上的所有脚本。然而,这使得它比需要的更复杂,因为我只需要一个脚本,一个带有类“analytics”的脚本

所以我只想返回值“pop1”和“1.1.2”

只有一个window.TEST.gameName和window.TEST.gameVersion实例,因此它们是唯一的。也许我用Nokogiri把它复杂化了,我应该用正则表达式,或者这样会更快

我也不喜欢Nokogiri,只是这似乎是最受欢迎的选择

我尝试了使用doc.at和doc.search的几种变体,但我一直没有得到任何回报,所以我可能做得不正确。

需要一段时间<代码>脚本.分析查找分析类的脚本标记

doc.css('script.analytics').each do |script|
    puts script.content
end

至于第二部分,
window.TEST.gameName=“pop1”是Javascript。Nokogiri帮不了你。您需要一个Javascript解析器。

以Schwern的问题为基础,回答完整的问题

我曾经

doc.css('script.analytics').each do |script|
    @script = script.content
end
这给了我一个脚本,大约有一百行javascript,总是以相同的格式,只是不同的值

然后我做了:

game_name = @script.match(/window.TEST.gameName = "(.*?)";/m)[1].strip # returns pop1
game_version = @script.match(/window.TEST.gameVersion = "(.*?)";/m)[1].strip # returns 1.1.2
可能还有更好的方法,但这对我来说很有效

doc.css('script.analytics').each do |script|
    @script = script.content
end
game_name = @script.match(/window.TEST.gameName = "(.*?)";/m)[1].strip # returns pop1
game_version = @script.match(/window.TEST.gameVersion = "(.*?)";/m)[1].strip # returns 1.1.2