2012-10-12 22 views
0

有沒有辦法使用正則表達式在這個更復雜的分隔符?Rails TextHelper截斷方法:檢查更復雜的分隔符?

truncate(content, :length=>60, :separator=>' ') 

檢查標準空間作爲分隔符('')對我來說是不夠的。我的主要目標是檢查\ n(輸入一個新行),所以如果有人知道如何做到這一點,請讓我知道。

我也很好奇,如果有一種方法來檢查更廣泛的事情。

編輯: 對不起,更多的細節:希望有像=>/\ r \隔板N/所以確定在哪裏放置省略號當截斷方法將分離的兩個空間和新線周圍,但我不能使用正則表達式。看到問題了嗎?

+0

您可以擴展「我的主要目標是檢查\ n(輸入/換行)」嗎?我得到了「檢查」部分,但是最後你會在哪裏添加它? –

+0

增加了細節;現在更清楚了嗎? – dmonopoly

+0

我想我得到你要去的地方... –

回答

1

Truncate只允許兩個可選參數,:omission: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 

有了這個說,你應該能夠做到你想做到什麼(如果我:你可以通過截斷下面的代碼,它是隻設置了一個字符串,攜手合作,:separator見像這樣的東西理解正確的情況下)(開關換行符和諸如此類的東西的空間,在前):

truncate(content.gsub(/\s/i, ' '), :length=>60, :separator=>' ') 

如果這是太簡單了,你也許可以想出你想要什麼,有一個非常簡單的修改官方truncate()代碼...

+0

謝謝 - 我從這裏得到了主要概念!我最終這樣做:truncate(content.gsub(/ \ n /,''),:length => 60,:separator =>'') – dmonopoly

0

這個工作對我來說:

truncate(content, :length => 60, :separator => '\n') 
+0

好的,謝謝,但我想檢查空格和新行。我認爲正則表達式會是/ \ r \ n /,但我不能把它放進去。看到問題了嗎? – dmonopoly