Ruby:截断另一个字符串中包含的长字符串

时间:2012-08-31 18:05:42

标签: ruby-on-rails ruby truncate

string_a = "I'm a string but this aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa is long."

如何检测aaaa...aaa(没有空间很长的部分)部分并截断它以使结果看起来像(字符串的其余部分应该看起来相同):

puts string_a # => "I'm a string but this aaa....aaa is long."

我使用此方法截断:

  def truncate_string(string_x)
    splits = string_x.scan(/(.{0,9})(.*?)(.{0,9}$)/)[0]
    splits[1] = "..." if splits[1].length > 3
    splits.join
  end

所以跑步:

puts truncate_string("I'm a very long long long string") # => "I'm a ver...ng string"

问题是检测到'aaaa...aaaa'并对其应用truncate_string

解决方案的第一部分?使用正则表达式检测长于N的字符串?

2 个答案:

答案 0 :(得分:2)

这样的东西
string.gsub(/\S{10,}/) { |x| "#{x[0..3]}...#{x[-3..-1]}" }

其中10是单词的最大长度?

答案 1 :(得分:1)

你怎么喜欢这个?

s = "I'm a string but this aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa is long."
s.gsub(/(.* \w{3})\w{5,}(\w{3}.*)/, '\1...\2')
 => "I'm a string but this aaa...aaa is long."