ruby-on-rails - 如何截断字符串并返回没有中心部分的第一部分和最后一部分?

标签 ruby-on-rails ruby truncate

string_a = "I'm a very long long long string"

Ruby 中是否有一种方法可以像这样截断字符串?:

magic_method(string_a) # => "I'm a ver...ng string"

在 Rails 中我可以这样做:truncate(string_a) 但只返回第一部分。

最佳答案

您可以尝试方法 String.scan 用正则表达式在您希望的地方断开字符串。尝试类似的东西:

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

解释: 假设 string_a = "I'm a very long long long string"; string_b = "一个小的测试字符串";和 string_c = "tiny"。首先将字符串分成 3 组。

  • 第一组 (.{0,9}) try catch 前 9 个或更少的字符。前任。 "I'm a ver" for string_a; "A small t" 用于 string_b"tiny" 用于 string_c
  • 最后一组 (.{0,9}$) try catch 最后 9 个或更少的字符和字符串结尾 ($)。例如"ng string" for string_a; "st string" for string_b and "" for string_c;
  • 中间组 (.*?) 试图捕获剩下的东西。这只是因为 ? 使这个正则表达式不贪婪(否则它会得到字符串的其余部分,最后一组什么都不留。例如:“y long long lo” string_a"e"string_b""string_c

然后我们检查中间组是否大于 3 个字符,如果是,我们用 "..." 替换。这只会发生在 string_a 上。在这里我们不想让 string_b 变长,将 "e" 替换为 "..." 导致 "A simple t...st 字符串".

最后使用 Array.join 将组(数组元素)连接成一个字符串

关于ruby-on-rails - 如何截断字符串并返回没有中心部分的第一部分和最后一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12202112/

相关文章:

ruby-on-rails - 在 Rails 4 中扩展数组而不创建新类

ruby-on-rails - 如何开始启动 "rvmsudo rails server"命令

stream - jq手册中truncate_stream示例需要解释

ruby - 有没有一种 Ruby 方法可以删除初始化程序中的样板代码?

ruby-on-rails - Splat (*) 运算符攻击与常量和 attr_reader 与 rubocop

css - 使用 css 居中页面剪辑或省略文本困难

hadoop - Sqoop中的时间戳截断

ruby-on-rails - authlogic 在使用 selenium 驱动程序时无法与 capybara 一起工作

ruby-on-rails - 如何使用 Rails3 更改 xml 响应中的日期时间?

ruby - 如何创建一个无限可枚举的Times?