2011-11-26 62 views
1

我正在尋找一種方式在nokogiri去除HTML空白&評論和JavaScript評論(/ * * /,/ /)。我這樣做並不是因爲文檔的大小。我正在玩機架中間件來完成這項工作。我知道我可以通過正則表達來做,但我認爲這可能會很麻煩。如何使用nokogiri去除HTML空白和評論和javascript評論?

如果不可能與nokogiri做,請給我最好的正則表達式去掉以上兩種情況。

我使用正則表達式的嘗試:

response = @app.call(env) 
body = response.last.body.gsub(/(\n|\t|\r)/, ' ').gsub(/>\s*</, '><').gsub(/<!--[^>]*-->/, ' ').squeeze(' ') 
response.last.body = body 
response 

我認爲應該做的,而不是使用正則表達式更清潔的方式。

+0

這個問題並沒有顯示你已經嘗試了什麼,或者你遇到了什麼特定的問題。請參閱http://stackoverflow.com/faq#dontask,特別是「基於您面臨的實際問題」。 –

+0

好吧,我更新了問題,說明我已經嘗試過。 – Chamnap

回答

0

我最後寫一個middleware來處理這一點,因爲有這個沒有確切的解決方案。 這裏我使用非常嚴格的正則表達式來處理它。

檢查我的github回購代碼。

3

絲瓜是好的,但它不會幫你脫光JavaScript註釋。

This thread處理剝離js評論但似乎有很多分歧。我同意那些說你不應該這樣做的人。但是,如果你想嘗試用絲瓜接受的答案,你可以這樣做:

require 'rubygems' 
require "loofah" 

scrubber = Loofah::Scrubber.new do |node| 
    node.content = node.content.strip if node.name == "text" 
    node.remove if node.name == "comment" 
    if node.cdata? && node.parent.name == "script" 
     node.content = node.content.gsub(/\/\*![^*]*\*+(?:[^*\/][^*]*\*+)*\//,'') 
    end 
end 

puts Loofah.fragment('<p> trim </p><!-- remove --><p> me </p><script>var x=0;/*! remove! */</script>').scrub!(scrubber) 

# <p>trim</p><p>me</p><script>var x=0;</script>