-6ren">
gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 17:17:16 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com