删除 Ruby 中 URI 的最后一段

Remove last segment of an URI in Ruby

我正在尝试使用 Ruby、

删除给定 URI 的最后一段

像这样:

http://example.com/foo/bar/baz/?lala=foo

我怎样才能得到这个:

"http://example.com/foo/bar/baz/"

我已经搜索过,但我得到的只是获取 URI 的最后一段或主机部分。

s = "http://example.com/foo/bar/baz/?lala=foo"
"http://example.com/foo/bar/baz/?lala=foo"
["http://example.com/foo/bar/baz/", "lala=foo"]
>> s.split("?").first
"http://example.com/foo/bar/baz/"

你有没有尝试过这样的事情,可能是你想要拆分字符串时的第一件事

最重要的是要记住:Ruby是一种面向对象的语言。它不是面向数组的语言,不是面向散列的语言,也不是面向字符串的语言。

当你想做某事时,你会构造一个代表你的概念的对象并操纵该对象。在这种情况下,您想要操作一个 URI,因此您需要构造一个表示 URI 的对象。

值得庆幸的是,Ruby 标准库已经包含了针对此类对象的现成 class:

require 'uri'

uri = URI.parse('http://example.com/foo/bar/baz/?lala=foo#quux')

uri.query = nil

uri
# => #<URI::HTTP http://example.com/foo/bar/baz/#quux>

uri.to_s
# => 'http://example.com/foo/bar/baz/#quux'

uri.fragment = nil

uri
# => #<URI::HTTP http://example.com/foo/bar/baz/>

uri.to_s
# => 'http://example.com/foo/bar/baz/'

如您所见,一旦您创建了一个代表您的 URI 的适当对象,对其进行操作就变得微不足道了。

根据你对@JorgWMittag 的评论,你真正需要的是这个

s = 'http://example.com/foo/bar/baz/?lala=foo#quux'
s[/.*\//]
#=> "http://example.com/foo/bar/baz/"
s = 'http://example.com/foo/bar.html'
s[/.*\//]
#=> "http://example.com/foo/"

基本上它只是说如果你有像

s = "http://example.com/foo/bar/?baz=/blah/blah"

那么这将行不通,但您的问题和规格目前似乎很松散。