Ruby on rails 在一个字的中间截断一个字符串 我如何将文本截断到Rails 3最接近的位置,而在单词中间没有删减?

Ruby on rails 在一个字的中间截断一个字符串 我如何将文本截断到Rails 3最接近的位置,而在单词中间没有删减?,ruby-on-rails,ruby-on-rails-3,truncate,Ruby On Rails,Ruby On Rails 3,Truncate,例如,我有一个字符串: "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

例如,我有一个字符串:

"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..."

如果将分隔符传递给truncate方法,它将执行自然分词,而不是在单词中间截断

类似的方法应该可以工作(如果希望默认值为30个字符,则可以将长度更改为您想要删除的长度):


有关truncate中选项的更多信息,请参见

truncate是一个很好的选项,但是如果您希望完成单词检测,正则表达式是您的解决方案。我想推荐如下:

string.match(/^.{0,30}\b/)[0]
或者你可以把它放在一个函数中

def shorten(string, count)
  string.match(/^.{0,#{count}}\b/)[0]
end
更新 根据,可以将regex传递到truncate方法中,如下所示:

'Once upon a time in a world far far away'.truncate(27, separator: /\s/)

这两个选项都提供了比将空格字符传入truncate方法更好的单词边界检测功能。

rails4.2
开始,有一个新的
ActiveSupport
方法称为。它用字符串的数量截断了一个字符串,这样就不可能在单词中间有一个词条。

'And they found that many people were sleeping better.'.truncate_words(5, omission: '... (continued)')
返回

"And they found that many... (continued)"
"And they found that many... (continued)"