0

これでより複雑なセパレータに正規表現を使用する方法はありますか?

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

区切り記号 (' ') として標準のスペースを確認するだけでは十分ではありません。私の主な目標は\n (enter/a new line) をチェックすることなので、誰かがその方法を知っていれば教えてください。

また、より広い範囲をチェックする方法があるかどうかも興味がありました。

編集: 申し訳ありませんが、詳細: => / \r\n/ のようなセパレーターを使用したいので、省略記号を配置する場所を決定するときに、切り捨てメソッドがスペースと改行の両方を区切りますが、正規表現は使用できません。問題が見えますか?

4

2 に答える 2

1

Truncateは、2 つのオプション引数のみを許可し:omissionます:separator。次の truncate のコードを見ると、 の文字列でのみ機能するように設定されていることがわかります: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()これが単純すぎる場合は、公式コードにかなり簡単な変更を加えることで、おそらくあなたが望むものを正確に思いつくことができます...

于 2012-10-12T23:35:58.530 に答える
0

これは私のために働く:

truncate(content, :length => 60, :separator => '\n')
于 2012-10-12T23:15:47.687 に答える