2013-09-24 2 views
0

Я пытаюсь захватить HTML-теги с регулярным выражением, чтобы форматировать с использованием методов креветок. У меня это до сих пор:Рельсы и креветка: использование регулярного выражения для форматирования

def format(pdf, string) 
    regex_string = "\n|" + 
       "<b>(.*)<\/b>|" + 
       "<h3>(.*)<\/h3>|" + 
       "<strong>(.*)<\/strong>|" + 
       "[^<\n]+" 
    regex = Regexp.new(regex_string, Regexp::MULTILINE) 
    tokens = string.gsub("\n", " ").gsub(/<br\s*\/?>/, "\n").scan(regex) 
    tokens.each do |breaker| 
    case breaker 
    when "<b>(.*)<\/b>", "<strong>(.*)<\/strong>" 
     pdf.text breaker.to_s, :size => 10 
    when "<h3>(.*)<\/h3>" 
     pdf.text breaker.to_s, :size => 16 
    else 
     pdf.text breaker.to_s, :size => 10, :leading => 1 
    end 
    end 
end 

Я думаю, что мое регулярное выражение неверно, хотя и я не могу понять, что это должно быть. Я получаю довольно странную распечатку массива с помощью этого метода. Любая помощь будет отличной!

UPDATE

Изменение (.*) к (.*?) получил правильные теги Rubular, но все выходы, кроме тех, в HTML-теги выше [nil, nil, nil] в тройках.

ответ

1

Не проверяя его сам, он может работать на пустых элементах массива. Попробуйте что-то вроде:

tokens = string.gsub("\n", " ").gsub(/<br\s*\/?>/, "\n").scan(regex).compact 

Для общего HTML разбора, Nokogiri, вероятно, лучший вариант там (для Rails):

+0

Спасибо за предложение. Оказывается, Нокигири был лучше, чем хотел. –

+0

Стреляйте, если бы я знал, что вы открыты для этого, я бы предложил! Не намного лучше разбирается HTML в рельсах. Я обновлю свой ответ, чтобы это отразить. – tyler

 Смежные вопросы

  • Нет связанных вопросов^_^