Ios 从Swift中的URL中删除所有pathcomponents

Ios 从Swift中的URL中删除所有pathcomponents,ios,swift,url,nsurl,Ios,Swift,Url,Nsurl,我有一个包含许多路径组件的URL。是否有一种优雅的方法来删除所有路径组件?基本上,我只想保留方案和URL的主机。以及端口(如果可用) 当然,我可以使用现有URL的相关属性创建一个新的URL对象: let newURL = "\(existingURL.scheme!)://\(existingURL.host!)" 或在pathcomponents上循环,移除最后一个组件,直到没有剩余组件 但这两种解决方案似乎都不那么优雅,因此我正在寻找一种更好、更安全、更高效的解决方案。我看到的唯一可能性是

我有一个包含许多路径组件的URL。是否有一种优雅的方法来删除所有路径组件?基本上,我只想保留方案和URL的主机。以及端口(如果可用)

当然,我可以使用现有URL的相关属性创建一个新的URL对象:

let newURL = "\(existingURL.scheme!)://\(existingURL.host!)"
或在pathcomponents上循环,移除最后一个组件,直到没有剩余组件


但这两种解决方案似乎都不那么优雅,因此我正在寻找一种更好、更安全、更高效的解决方案。

我看到的唯一可能性是使用
URLComponents
并手动删除一些组件:

let url = URL(string: "http://www.google.com/and/my/path")!
print(url)

var components = URLComponents(url: url, resolvingAgainstBaseURL: false)!
components.path = ""
print(components.url!) // http://www.google.com
如果您决定手动构建URL,那么最好使用
URLComponents

let url = URL(string: "http://www.google.com/and/my/path")!
var components = URLComponents()
components.scheme = url.scheme
components.host = url.host
print(components.url!) // http://www.google.com

您可以尝试Regex方法。这将比其他方式更优雅。我只是快速编写代码。正则表达式可能不起作用,但对于您的查询类型,您将获得更多的正则表达式示例

    let urlRegEx = "((http(s)?:\\(/)\\/)|(\\/.*){1}"
    let string = "https://pixabay.com/en/art-beauty-fairytales-fantasy-2436545/"
    let matched = matches(for: urlRegEx, in: string)
    print(matched)

   func matches(for regex: String, in text: String) -> [String] {

    do {
        let regex = try NSRegularExpression(pattern: regex)
        let nsString = text as NSString
        let results = regex.matches(in: text, range: NSRange(location: 0, length: nsString.length))
        return results.map { nsString.substring(with: $0.range)}
    } catch let error {
        print("invalid regex: \(error.localizedDescription)")
        return []
    }
   }
你可以使用reg-EX

  let url = "http://www.somedomain.com/?f"
                let pattern = "^(http://|https://)[A-Za-z0-9.-]+(?!.*\\|\\w*$)"
                 let regex = try! NSRegularExpression.init(pattern: pattern, options: .caseInsensitive)
                let matches = regex.matches(in: url, options: [], range: NSMakeRange(0, url.count))

                matches.enumerated().forEach({ (_, match) in
                    print((url as NSString).substring(with: match.range))
                })

你能举个例子来说明你需要的输出吗?看看这些文档,没有类似的东西。@Abdelahadarwish,假设我有一个类似“”的URL。我想删除URL中的“/with/some/path/components”部分,只保留“您可以使用添加的regex-answer,与任何URL一起使用”