首先,你不需要在ruby中使用return
語句。 Ruby將默認返回最後一個東西。在你的情況,這是從gsub
返回的字符串:
def wrap_image_with_link(body)
body.gsub(%r{http://[^\s<]+}) do |url|
if url[/(?:png|jpe?g|gif|svg)$/]
"<a href='#{url}' target='_blank'><img src='#{url}' /></a>"
end
end
end
這仍然是不完全正確。然後我會專注於img
標籤我最初的正則表達式:
def wrap_image_with_link(body)
body.gsub(/\<img.*src\=['"](.*)['"].*\/\>/) do |url|
"<a href='#{url}' target='_blank'><img src='#{url}' /></a>"
end
end
Rails有一對夫婦的助手清理它。
def wrap_images_with_links(body)
body.gsub(/\<img.*src\=['"](.*)['"].*\/\>/) do
link_to(image_tag($1), $1, :target => '_blank')
end
end
你可能想使REG前不區分大小寫:
def wrap_images_with_links(body)
body.gsub(/.*\<img.*src\=['"](.*)['"].*\/\>/i) do
link_to(image_tag($1), $1, :target => '_blank')
end
end
所以gsub
,而不是sub
,改變匹配REG-EX的每個實例,所以需要稍微調整了reg前以適應更明確的匹配:
def wrap_images_with_links(body)
body.gsub(/\<img[\s\w"=]+src\=['"](http[s]?:\/\/[\w.\/]+)['"]\s?[\/]?\>/i) do
link_to(image_tag($1), $1, :target => '_blank')
end
end
根據您的網址的複雜性,你可能需要調整REG-EX支持?
或空白以外的字符,但是這項工作非常好。
感謝您的努力。是的,我希望它是相同的鏈接:它將像一個縮放功能。 –
我從來沒有使用gsub的塊版本,所以讓我弄清楚。 –
@emm一定要檢查最後的實現。它應該適合你。根據你的img標籤如何形成,你可以調整註冊前如果它不適合你。 –