Вы можете сделать это с помощью регулярного выражения, например:
"Hello\n<br><br/><br>\nworld".gsub(/(?im)(<br\s*\/?>\s*)+/,'<br>')
Чтобы объяснить, что: у части (?im)
есть опции, указывающие, что совпадение должно быть без учета регистра и что .
должно соответствовать переводу строки. Сгруппированное выражение (<br\s*\/?>\s*)
соответствует <br>
(необязательно с пробелами и завершающим /
), за которым, возможно, следует пробел, а +
говорит, что соответствует одной или нескольким из этой группы.
Тем не менее, я должен отметить, что в целом использование регулярных выражений для манипулирования HTML не очень хорошая идея - вместо этого следует использовать правильный синтаксический анализатор. Например, вот лучший способ сделать это, используя Nokogiri :
require 'nokogiri'
document = Nokogiri::HTML.parse("Hello
<br><br/><br>
World!")
document.search('//br').each do |node|
node.remove if node.next.name == 'br'
end
puts document
Это приведет к выводу типа:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>Hello
<br>
World!</p></body></html>
(Анализатор превращает ваш ввод в правильно сформированный документ, поэтому у вас есть DOCTYPE и теги <html><body><p>
.)