我有一个带有网络链接的NSString。我需要找到以http://开头的字符串中的所有Web链接。这样做的最佳方式是什么?
答案 0 :(得分:2)
方法
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script
使您能够运行自定义JavaScript。 JavaScript可能有权访问DOM,如果是这样,提取所有锚标记并返回它们应该很简单。
当然,我只编写了最小的iPhone应用程序,并且对JavaScript或DOM不太熟悉,所以我可能会离开这里。
查看DOM和JavaScript可能就像
一样简单anchors = [htmlview_object stringByEvaluatingJavaScriptFromString @"document.anchors"];
但是,我再也不知道我在说什么。
试试这个:
javascript = @"function return_links() {\n"
" var a = new Array;\n"
" for (i = 0; i < document.anchors.length; i++) {\n"
" a.push(document.anchors[i].href);\n"
" }\n"
" return a.join(\"\\n\");\n"
"}\n"
"return_links();\n";
links = [htmlview_object stringByEvaluatingJavaScriptFromString javascript];
答案 1 :(得分:0)
最好的方法是在NSString和HTML Parser中查找链接,请参阅Parsing HTML on the iPhone。如果您必须使用正则表达式(并且请参阅Can you provide some examples of why it is hard to parse XML and HTML with a regex?了解您不应该使用的原因),PCRE似乎可用于iPhone。链接的常见且有缺陷的正则表达式为/href="(.*?)"/
。
当然,可用的最佳解析器可能是本机html查看小部件,因为它使您能够运行JavaScript(请参阅我对原始问题的原始答案),您应该能够从DOM中提取锚点( document.anchors)并使用document.write()和其他DOM方法编写/重写任何你需要的东西。