我有我在UIWebView上设置的HTML内容,如下所示:
myWebView.loadHTMLString(myHTML, baseURL: nil)
myHTML可以在其内容中包含一些YouTube链接,如下所示: https://www.youtube.com/watch?v=OJJXNJo-c3Q
如何修改myHTML字符串,以便将每个YouTube链接替换为该链接的YouTube嵌入代码,以便它在UIWebView中显示为嵌入式视频?我认为正则表达式可以提供帮助,但我对此并不擅长。
感谢任何帮助。
答案 0 :(得分:0)
我创建了一个非常简单的函数,它查找给定类型的url并用给定的主机替换带有新字符串的url。
func replaceUrlMatchesInText(text: NSString, forHost hostString: NSString, replaceBlock: (NSString) -> NSString) -> NSString {
var error: NSError? = nil
var newText = text
let dataDetector = NSDataDetector(types: NSTextCheckingType.Link.rawValue,
error: &error)
if let matches = dataDetector?.matchesInString(text,
options: NSMatchingOptions.ReportCompletion,
range: NSMakeRange(0, text.length)) as? [NSTextCheckingResult] {
for match in matches {
let range = match.rangeAtIndex(0)
let matchedString = text.substringWithRange(range)
if matchedString.hasPrefix(hostString) {
let iFrameFormat = replaceBlock(matchedString)
let newRange = newText.rangeOfString(matchedString)
newText = newText.stringByReplacingCharactersInRange(newRange, withString: iFrameFormat)
}
}
}
return newText
}
var htmlString = "<html><body style='background-color: transparent; color: white; font-family: HelveticaNeue-Light; padding: 20px;'><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. </p> <p></p> <p>youtube.com/watch?v=OJJXNJo-c3Q</p>; </body></html> "
let youtubeEmbeddedVideoHtmlString = replaceUrlMatchesInText(htmlString, forHost: "youtube.com") {
(match: NSString) in
return "<iframe width=\"560\" height=\"315\" src=\"//\(match)\" frameborder=\"0\" allowfullscreen></iframe>"
}
println(youtubeEmbeddedVideoHtmlString)
此功能不仅可以通过“www.youtube.com”提取链接,还可以提取任何网址,您可以将其替换为您想要的任何字符串。在这个例子中,我只是将它嵌入到嵌入式URL的youtube格式中。