Поиск веб-ссылок в NSString - PullRequest
       10

Поиск веб-ссылок в NSString

2 голосов
/ 18 апреля 2009

У меня есть NSString с веб-ссылками. Мне нужно найти все веб-ссылки в строке, начинающейся с http: //. Каков наилучший способ сделать это?

Ответы [ 2 ]

2 голосов
/ 18 апреля 2009

Способ

- (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];
0 голосов
/ 18 апреля 2009

Лучший способ - найти ссылки в NSString HTML Parser, см. Разбор HTML на iPhone . Если вы должны использовать регулярное выражение (и посмотрите Можете ли вы привести некоторые примеры того, почему трудно проанализировать XML и HTML с регулярным выражением? , почему вы не должны), PCRE кажется быть доступным для iPhone. Обычное и ошибочное регулярное выражение для ссылок: /href="(.*?)"/.

Конечно, лучший доступный анализатор - это, вероятно, родной виджет просмотра html, и, поскольку он дает вам возможность запускать JavaScript (см. Мой оригинальный ответ на исходный вопрос), вы сможете извлечь якоря из DOM ( document.anchors) и пишите / переписывайте все, что вам нужно, используя document.write () и другие методы DOM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...