Как удалить html пробелы и комментарии и комментарии javascript, используя nokogiri? - PullRequest
1 голос
/ 26 ноября 2011

В нокогири я ищу способ убрать html пробелы, комментарии и комментарии javascript (/ * * /, //).Я делаю это не из-за размера документа.Я играю со стойкой промежуточного программного обеспечения, чтобы сделать эту работу.Я знаю, что могу сделать это с помощью регулярного выражения, но я думаю, что это может быть хлопотно.

Если это невозможно сделать с помощью nokogiri, пожалуйста, дайте мне лучшее регулярное выражение, которое можно вырезать для 2 вышеописанных случаев.

То, что я пытался использовать регулярное выражение:

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

Я думаю, что должен быть более чистый способ, чем использование регулярного выражения.

Ответы [ 3 ]

3 голосов
/ 27 ноября 2011

Люфа хороша, но она не поможет вам убрать комментарии javascript.

Эта тема имеет дело с зачисткой 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>
2 голосов
/ 26 ноября 2011

Люфа может быть тем, что вы ищете:

https://github.com/flavorjones/loofah

0 голосов
/ 28 мая 2012

В итоге я пишу связующее ПО , чтобы справиться с этим, поскольку нет точного решения для этого. Здесь я использую очень строгое регулярное выражение, чтобы справиться с этим.

Проверьте код на моем репозитории github.

...