从 Swift 中的 href 中提取链接

Ara*_*ell 0 swift

假设我有一个这样的 html 链接:

<a href = "https://mitsui-shopping-park.com/lalaport/koshien/" target="_blank"> https://mitsui-shopping-park.com/lalaport / koshien / </a>
Run Code Online (Sandbox Code Playgroud)

我想提取:

<a href = "THIS LINK" target="_blank"> NOT THIS LINK </a> 
Run Code Online (Sandbox Code Playgroud)

我试过:someString.replacingOccurrences(of: "<[^>]+>", with: "", options: .regularExpression, range: nil)但这给了我:

<a href = "NOT THIS LINK" target="_blank"> BUT THIS LINK </a>
Run Code Online (Sandbox Code Playgroud)

请帮忙。

iel*_*ani 5

不需要正则表达式,您可以使用属性字符串的链接属性。

首先,让我们使用这个扩展:

extension String{
    func convert2Html() -> NSAttributedString {

        guard let data = data(using: .utf8) else { return NSAttributedString() }

        do {
            let htmlAttrib = NSAttributedString.DocumentType.html
            return try NSAttributedString(data: data,
                                          options: [.documentType : htmlAttrib],
                                          documentAttributes: nil)
        } catch {
            return NSAttributedString()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

转换这个String

let html = "<a href = \"https://mitsui-shopping-park.com/lalaport/koshien/\" target=\"_blank\"> https://mitsui-shopping-park.com/lalaport / koshien / </a>"
Run Code Online (Sandbox Code Playgroud)

NSAttributedString

let attrib = html.convert2Html()
Run Code Online (Sandbox Code Playgroud)

然后以这种方式提取链接:

let link = attrib.attribute(.link, at: 0, effectiveRange: nil)

if let url = link as? NSURL, let href = url.absoluteString {
    print(href)  //https://mitsui-shopping-park.com/lalaport/koshien/
}
Run Code Online (Sandbox Code Playgroud)