如何使用正则表达式在字符串中插入br标签?

时间:2013-05-28 18:32:51

标签: ruby-on-rails ruby ruby-on-rails-3

我有一个字符串:

str = "abc xyz<img src="abc"/> 123 <img src="abc"/><img src="xyz"/>"

我想在字符串末尾的连续图像标记之前放置<br/>,以便生成的字符串为:

str = "abc xyz<img src="abc"/> 123 <br/><img src="abc"/><img src="xyz"/>"

只有字符串末尾的连续图像标记前面会有br。 我如何使用正则表达式和gsub方法?

2 个答案:

答案 0 :(得分:1)

您可以执行类似

的操作
1.9.3p194 :001 > str = "abc xyz 123 <img src='smiley.gif' height='42' width='42'>"
 => "abc xyz 123 <img src='smiley.gif' height='42' width='42'>" 
1.9.3p194 :002 > str.gsub(/<img/, "<br/><img")
 => "abc xyz 123 <br/><img src='smiley.gif' height='42' width='42'>" 

虽然更好的解决方案可能是将类添加到使用CSS将其推送到下一行的图像标记。可能你只需要一个“display:block”风格

答案 1 :(得分:0)

require 'nokogiri'
require 'pp'

doc = Nokogiri::HTML::Document.parse(<<-eohtml)
"abc xyz<img src="abc"/> 123 <img src="abc"/><img src="xyz"/>"
eohtml

doc.css("img").each{|i| i.previous = '<br/>'}
puts doc.to_html

输出:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>"abc xyz<br><img src="abc"> 123 <br><img src="abc"><br><img src="xyz">"
</p></body></html>

根据最新的OP编辑:

require 'nokogiri'
require 'pp'

doc = Nokogiri::HTML::Document.parse(<<-eohtml)
"abc xyz<img src="abc"/> 123 <img src="abc"/><img src="xyz"/>"
eohtml
doc.css("img[src = abc]")[1].previous = "<br/>"
puts doc.to_html

输出:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>"abc xyz<img src="abc"> 123 <br><img src="abc"><img src="xyz">"
</p></body></html>