2

有人可以告诉我如何使用 Hpricot 和 RegEx 将这行 Javascript 转换为 Ruby 吗?

// Replace all doubled-up <BR> tags with <P> tags, and remove fonts.
    var pattern =  new RegExp ("<br/?>[ \r\n\s]*<br/?>", "g");
    document.body.innerHTML = document.body.innerHTML.replace(pattern, "</p><p>").replace(/<\/?font[^>]*>/g, '');

我设置的代码是:

require 'rubygems'
require 'hpricot'
require 'open-uri'

@file = Hpricot(open("http://www.bubl3r.com/article.html"))

谢谢

4

3 回答 3

1

OPs URL 的内容似乎发生了变化,就像互联网上经常发生的那样,所以我拼凑了一些示例 HTML 来展示我将如何处理这个问题。

此外,Nokogiri是我推荐的 Ruby HTML/XML 解析器,因为它受到非常积极的支持、健壮和灵活。

require 'nokogiri'

html = <<EOT
<html>
<body>
  some<br><br>text
  <font>
    text wrapped with font
  </font>
  some<br>more<br>text
</body>
</html>
EOT

doc = Nokogiri::HTML(html)

# Replace all doubled-up <BR> tags with <P> tags, and remove fonts.
doc.search('br').each do |n|
  if (n.previous.name == 'br')
    n.previous.remove 
    n.replace('<p>')
  end
end

doc.search('font').each do |n|
  n.replace(n.content)
end

print doc.to_html
# >> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
# >> <html><body>
# >>   some<p></p>text
# >>   
# >>     text wrapped with font
# >>   
# >>   some<br>more<br>text
# >> </body></html>
于 2011-02-24T08:49:59.203 回答
0

我认为清理 html 文件的更好方法是美汤。我将它用于 python,它做得很好,因为它模拟了 html 浏览器语义的某些部分。

http://www.crummy.com/software/RubyfulSoup/

于 2011-02-15T09:03:24.310 回答
0

即使它不会产生有效的 HTML,像这样的东西也可以:

require 'rubygems'
require 'hpricot'
require 'open-uri'

@file = Hpricot(open("http://www.bubl3r.com/article.html"))
puts @file.html.gsub('<br />', '<p>')
于 2011-02-24T06:51:22.097 回答