You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift:如何从WKWebView的URL提取值并生成新URL

解决方案

第一步:从旧URL中提取目标值

你已经通过webView.url拿到了旧URL,接下来可以根据URL的固定格式提取bundle-和.html之间的目标字符串,这里提供两种实用方案:

方案1:字符串拆分(适合格式固定的场景)

如果旧URL路径始终是bundle-xxxxxx.html这种结构,直接拆分字符串最直接:

guard let oldURL = webView.url,
      let lastPath = oldURL.pathComponents.last, // 获取到 "bundle-572974a2.html"
      let bundleID = lastPath.components(separatedBy: ["-", "."]).dropFirst().first else {
    // 处理URL为空或格式不符合预期的情况
    return
}
// 此时bundleID就是你需要的 "572974a2"

方案2:正则表达式(适配格式有小变动的场景)

如果URL格式可能存在细微变化,用正则匹配更稳妥:

guard let oldURL = webView.url else {
    return
}

do {
    // 匹配"bundle-"后到".html"前的任意字符
    let regex = try NSRegularExpression(pattern: "bundle-(.*?)\\.html")
    let range = NSRange(oldURL.absoluteString.startIndex..., in: oldURL.absoluteString)
    if let match = regex.firstMatch(in: oldURL.absoluteString, range: range) {
        let bundleID = String(oldURL.absoluteString[Range(match.range(at: 1), in: oldURL.absoluteString)!])
        // bundleID即为目标值
    }
} catch {
    // 处理正则编译失败的情况
    print("正则表达式错误:\(error)")
}

第二步:生成带目标值的新URL

把提取到的bundleID直接替换你代码里的"XXXXXXXX"即可:

// 确保已经成功提取到bundleID
guard let bundleID = bundleID else { return }

var components = URLComponents()
components.scheme = "https"
components.host = "new-example.org"
components.path = "/g"

components.queryItems = [
    URLQueryItem(name: "newbundle", value: bundleID) // 替换为提取到的目标值
]

if let newURL = components.url {
    // 这里拿到最终的新URL,可用于后续操作
    print(newURL) // 示例输出:https://new-example.org/g?newbundle=572974a2
}

内容的提问来源于stack exchange,提问作者tobias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 01:35:24