分割价值和单位的最优雅方式是什么,所以你有:
13min.some_method["value"] = 13
13min.some_method["unit"] = "min"
我认为它应该使用解压缩或拆分,但我可以让它工作!
答案 0 :(得分:8)
>> "13min".scan(/\d+|[^\d]+/)
=> ["13", "min"]
另一种方式:
>> i = "13min" =~ /[^\d]/
=> 2
>> "13min"[0,i]
=> "13"
>> "13min"[i,"13min".length]
=> "min"
String#split不是最好的原因是因为它摆脱了分隔符,但是你的两个字符串相互对接。
答案 1 :(得分:2)
这是您可以尝试的替代方案(也可以使用浮点数和负数):
s = "-123.45min"
value = s.to_f # => -123.45
unit = s[/[a-zA-Z]+/] # => "min"
与Ruby的to_f
和to_i
方法一样,它只是“尝试”获得结果。因此,如果您不提供单位,unit
将为nil
- 如果您只提供单位,则值为0。
"123-34min" value = 123, unit = "min"
"min" value = 0 unit = "min"
"-1234" value = -1234 unit = nil
"123-foo-bar" value = 123 unit = "foo"
P.S。当然,这假设您的单位中没有任何数字。