2013-05-18 3 views
1

Я разбираю некоторый HTML, и мне нужно получить все html в теге body. Моя целевая строка всегда будет выглядеть примерно так:Безопасное использование Regex для этого? (HTML)

<body><div><img src="" />text etc</div></body> 

Однако, мне просто нужно:

<div><img src="" />text etc</div> 

Моя целевая строка всегда будет начинаться и заканчиваться с этими тегами тела. Тем не менее, есть повторное предупреждение о том, что Regex не использует для анализа HTML, но у меня нет никаких жизнеспособных решений для этого, кроме Regex на данный момент.

Вопрос: Есть ли безопасный Regex (ы) для использования в этом случае? Или я должен просто забыть об этом?

+0

Что на самом деле означает «У меня нет никаких жизнеспособных решений для этого, кроме того, что Regex на данный момент» означает? Почему у вас нет жизнеспособных решений? Разве не лучше было бы * получать * жизнеспособные решения вместо использования нежизнеспособного *, который, как вы знаете, нежизнеспособен *? –

+0

Вы звучите как моя логика и учитель риторики. Но да, вы правы. Решение, которое я использую на данный момент, является проблемой, но это лучший, который у меня есть сейчас. DOM Parser, который я использую, возвращает innerHTML элементов с собственными тегами элемента без изменений, что означает, что он возвращает элемент в целом, а не только HTML внутри. Мне нужно Regex, чтобы извлечь из этого внутреннее. – mattsven

ответ

3

Вы не показали нам, что ваше регулярное выражение, но это не так безопасно, как используя DOM разбора, если это так просто, как:

<body>(.*?)</body> 

... потому что это возможно, что </body> содержится в строке атрибута или комментарий. Если вы готовы принять такой риск, тогда с вами все будет в порядке. Нет причин, по которым вы не сможете использовать разбор DOM и просто получить текст тела, хотя это, вероятно, будет менее эффективным.

Вы также можете пропустить регулярное выражение и просто найти строковые индексы <body> и </body> и получить подстроку между ними. Это должно быть еще быстрее.

Кстати, это не парсинг HTML; вы просто извлекаете из HTML

+0

Угадайте, что это регулярное выражение, но было бы гораздо лучше использовать dom no? –

+0

Ха-ха, это было мое точное Regex. Теперь я понимаю, что это не очень надежный ... любые предложения? – mattsven

+0

@mattcurtis это вероятно, что '' будет существовать в атрибутах или комментариях? Или вам нужно справиться с этим делом? Если это так, просто используйте парсер DOM. Я уверен, что у iphone sdk есть один, хотя я не знаком с ним. –

0

В этом случае нормально использовать RegEx. Сказав, что есть намного более простые способы получить innerHTML тега тела.

alert(document.body.innerHTML); 

должно дать вам точно, что при отсутствии RegEx ... или если вы используете JQuery

$(body).html(); 
Смежные вопросы