如何将文本截断到最靠近轨道3的位置,而不是在单词的中间切割?
例如,我有字符串:
"Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum."
如果我剪了它,我想这样切:
"Praesent commodo cursus magna, vel scelerisque nisl ..."
而不是:
"Praesent commodo cursus magna, vel scelerisque nisl conse..."
答案 0 :(得分:45)
如果将分隔符传递给truncate方法,它将执行自然的单词分隔,而不是在单词的中间截断
这样的东西应该可以工作(如果你想要30个字符的默认值,可以将长度改为你想要删除的长度):
truncate("Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.", :length => 17, :separator => ' ')
有关截断中可以使用的选项的更多信息,请参阅Documentation
答案 1 :(得分:6)
Truncate是一个很好的选择,但是如果你想要完整的单词检测,正则表达式就是你的解决方案。我会推荐这样的东西:
string.match(/^.{0,30}\b/)[0]
或者你可以把它放在一个函数
中def shorten(string, count)
string.match(/^.{0,#{count}}\b/)[0]
end
根据Rails documentation,您可以将正则表达式传递给truncate方法,如下所示:
'Once upon a time in a world far far away'.truncate(27, separator: /\s/)
这两个选项都提供了比将空格字符传递给truncate方法更好的字边界检测。
答案 2 :(得分:6)
从Rails 4.2
开始,有一个名为string#truncate_words
的新ActiveSupport
方法。它按字数截断字符串,这使得无法在单词的中间进行剪切。
'And they found that many people were sleeping better.'.truncate_words(5, omission: '... (continued)')
返回
"And they found that many... (continued)"