有没有办法在这个中使用正则表达式来处理更复杂的分隔符?
truncate(content, :length=>60, :separator=>' ')
检查标准空间作为分隔符('')对我来说是不够的。我的主要目标是检查\ n(输入/换新行),如果有人知道该怎么做,请告诉我。
如果有办法检查更广泛的事情,我也很好奇。
修改 对不起,更多详情:我希望有一个像=>的分隔符/ \ r \ n / 因此,在确定省略号的位置时,truncate方法将在空格和新行周围分开,但我不能使用正则表达式。看到问题了?
答案 0 :(得分:1)
Truncate仅允许两个可选参数:omission
和:separator
。您可以通过以下代码查看截断,它仅设置为使用:separator
的字符串:
# File activesupport/lib/active_support/core_ext/string/filters.rb, line 38
def truncate(length, options = {})
text = self.dup
options[:omission] ||= "..."
length_with_room_for_omission = length - options[:omission].mb_chars.length
chars = text.mb_chars
stop = options[:separator] ? (chars.rindex(options[:separator].mb_chars, length_with_room_for_omission) || length_with_room_for_omission) : length_with_room_for_omission
(chars.length > length ? chars[0...stop] + options[:omission] : text).to_s
end
说到这一点,你应该能够用这样的东西完成你想要实现的目标(如果我理解正确的情况)(首先将换行符和诸如空格切换到空格):
truncate(content.gsub(/\s/i, ' '), :length=>60, :separator=>' ')
如果这太简单了,你可能会想出你想要的东西,对官方truncate()
代码进行相当简单的修改......
答案 1 :(得分:0)
这对我有用:
truncate(content, :length => 60, :separator => '\n')