我有一个字符串,如下所示,
./component/unit
并需要拆分以获得component/unit
的结果,我将其用作插入哈希的键。
我尝试使用.split(/.\//).last
,但其结果为unit
,但却未获得component/unit
。
答案 0 :(得分:5)
你的正则表达式几乎没问题:
split(/\.\//)
您需要同时转义.
(任何字符)和/
(正则表达式分隔符)。
作为替代方案,您可以删除第一个'./'
子字符串:
'./component/unit'.sub('./','')
#=> "component/unit"
答案 1 :(得分:4)
我认为,这应该可以帮到你:
string = './component/unit'
string.split('./')
#=> ["", "component/unit"]
string.split('./').last
#=> "component/unit"
答案 2 :(得分:2)
所有其他答案都很好,但我认为你并没有真正处理String
,而是URI
或Pathname
,所以我建议你使用这些课程如果你可以的话。如果是这样,请调整标题,因为它不是关于自己动手的正则表达式,而是正确使用可用的库。
链接到ruby doc:
https://docs.ruby-lang.org/en/2.1.0/URI.html 和 https://ruby-doc.org/stdlib-2.1.0/libdoc/pathname/rdoc/Pathname.html
路径名的示例是:
require 'pathname'
pathname = Pathname.new('./component/unit')
puts pathname.cleanpath # => "component/unit"
# pathname.to_s # => "component/unit"
这是一个好主意(和/或使用URI也会很酷)也取决于你真正的问题是什么,即你想用提取的字符串做什么。如上所述,我有点怀疑你是否真的喜欢Strings。
答案 3 :(得分:0)
使用正面的lookbehind,你可以使用正则表达式:
reg = /(?<=\.\/)[\w+\/]+\w+\z/
str = './component'
str2 = './component/unit'
str3 = './component/unit/ruby'
str4 = './component/unit/ruby/regex'
[str, str2, str3, str4].each { |s| puts s[reg] }
#component
#component/unit
#component/unit/ruby
#component/unit/ruby/regex