让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"
forstring_a
;"A small t"
用于string_b
和"tiny"
用于string_c
。 - 最后一组
(.{0,9}$)
try catch 最后 9 个或更少的字符和字符串结尾 ($
)。例如"ng string"
forstring_a
;"st string"
forstring_b
and""
forstring_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/