У меня есть следующий бит HTML
<div class="article">this is a div article content</div>
, который «помечается» HTML-независимой программой на словах div
, class
и article
, что приводит к:
<<hl>div</hl> <hl>class</hl>="<hl>article</hl>">this is a <hl>div</hl> <hl>article</hl> content</<hl>div</hl>>
хотя мне действительно нужно:
<div class="article">this is a <hl>div</hl> <hl>article</hl> content</div>
Так как вывод - полный мусор (даже такие инструменты, как HTML Tidy
подавляют его), я подумал, что замена регулярного выражения поможет удалить лишние <hl>
s внутри тега HTML:
replace(/<([^>]*)<hl>([^<]*?)<\/hl>([^>]*?)>/g, '<$1$2$3>')
Теперь это работает, но только заменяет вхождение first в теге, то есть div
:
<div <hl>class</hl>="<hl>article</hl>">this is a <hl>div</hl> <hl>article</hl> content</div>
У меня вопрос: как заменить все <hl>
s внутри тега, чтобы убедиться, что HTML остается действительным?
Дополнительные примечания:
- Мне вообще не нужны атрибуты тега (т. Е.
class="article"
может исчезнуть)
- Я могу изменить
<hl>
и </hl>
для любых других строк
- Да, вывод идет от Solr
ОБНОВЛЕНИЕ : Я принял ответ jcollado, но мне нужно было это в Javascript. Это эквивалентный код:
var stripIllegalTags = function(html) {
var output = '',
dropChar,
parsingTag = false;
for (var i=0; i < html.length; i++) {
var character = html[i];
if (character == '<') {
if (parsingTag) {
do {
dropChar = html[i+1];
i++;
} while (dropChar != '>');
continue;
}
parsingTag = true;
} else if (character == '>') {
parsingTag = false;
}
output += character;
}
return output;
}