在没有图像的特定段落上截断

时间:2013-04-16 16:28:38

标签: ruby-on-rails ruby

简单的一个 - 如何截断博客帖子的文本(比方说)第3段?并明确告诉它不渲染图像?

我正在使用markdown btw。这可以通过简单的代码以一些“优雅”的方式完成,纯红宝石中没有外部宝石吗?

如果没有,如何最好地实施它?

1 个答案:

答案 0 :(得分:3)

对于截断段落,以下内容应该有效:

def truncate_by_paragraph(text, num=3)
  # since I'm not sure if the text will have \r, \n or both I'm swapping
  # all \r characters for \n, then splitting at the newlines and removing
  # any blank characters from the array
  array = text.gsub("\r", "\n").split("\n").reject { |i| i == "" }
  array.take(num).join("\n") + ".." # only 2 dots since sentence will already have 1
end

要删除图像,您可以执行以下操作:

def remove_images(text)
  text.gsub(/<img([^>])+/, "")
end

然后你可以做

truncate_by_paragraph(@text) # will return first 3 paragraphs
truncate_by_paragraph(@text, 5) # will return first 5 paragraphs
remove_images(truncate_by_paragraph(@text)) # 3 paragraphs + no images

根据您之后的格式,您可能希望将第一种方法中的join更改为join("\n\n")以获得双倍间距。

此外,如果你真的想在文本的末尾...,你可能想测试第3段是否有点,或者它可能已经有3。