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
相关产品推荐
相关产品推荐

