Регулярное выражение для удаления, учитывая (x) HTML-тэг от строки

Когда вы поместите ++ после в переменную, она получает приращение после назначения. Вы также можете поместить ++ перед в переменную, и она будет увеличена до присвоения.

Javascript действительно ведет себя точно ] так же, как PHP для приращения префикса и постфикса.

6
задан Cœur 22 April 2018 в 09:05
поделиться

8 ответов

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

Вы смогли сходить с рук что-то вроде этого:

</?tag[^>]*?>

Но это зависит от точно, что Вы делаете. Например, это не удалит содержание тега, и оно может оставить Ваш HTML в недопустимом состоянии, в зависимости от которого тега Вы пытаетесь удалить. Это также справляется плохо с недопустимым HTML (и существует многое из этого о).

Используйте синтаксический анализатор вместо этого :)

17
ответ дан 8 December 2019 в 02:53
поделиться

Я думаю, что существует некоторый серьезный anti-regex фанатизм, происходящий здесь. Существует много времен, когда можно хотеть разделить конкретный тег из некоторой разметки, когда не имеет смысла использовать полноценный синтаксический анализатор.

Конечно, существуют времена, когда синтаксический анализатор мог бы быть наилучшим вариантом, но если Вы ищете regex затем:

<script[^>]*?>[\s\S]*?<\/script>

Это удалило бы теги script и их содержание. Удостоверьтесь, что Вы используете нечувствительное к регистру соответствие.

Если Вы не хотите удалять содержание тега затем, можно использовать:

<\/?script[^>]*?>

Пример использования в JavaScript был бы:

function stripScripts(markup) {
  return markup.replace(/<script[^>]*?>[\s\S]*?<\/script>/gi, '');
}

var safeText = stripScripts(textarea.value);
15
ответ дан 8 December 2019 в 02:53
поделиться

Я думаю, что это мог бы быть Raymond Chen (blogs.msdn.com/oldnewthing), который я перефразирую (плохо!) здесь... Но, Вы хотите Регулярное выражение? "Теперь у Вас есть две проблемы"...:=)

Если строка правильно построена (X) HTML, Вы могли бы загрузить его в синтаксический анализатор (HTML/XML) и использовать это для удаления каких-либо узлов незаконного разнообразия? Если это не правильно построено, то это становится немного более хитрым, но, я подозреваю, что RegEx не является лучшим способом пойти об этом...

0
ответ дан 8 December 2019 в 02:53
поделиться

Существует только Слишком много способов, которыми единственный тег может появиться, не говоря уже о кодировке, вариантах, и т.д.
Я настоятельно рекомендую, чтобы Вы заново продумали этот подход.... Вам действительно не придется обрабатывать HTML непосредственно, так или иначе.

0
ответ дан 8 December 2019 в 02:53
поделиться

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

s/<TAG[^>]*>([^<]*)</TAG[^>]*>/\1

В основном найдите стартовый тег, любой текст промежуточный теги и затем завершающий тэг. Замените все это тем, что было промежуточным теги.

0
ответ дан 8 December 2019 в 02:53
поделиться

Исправленный ответ:

</?TAG\b[^>]*?>

Поскольку ответ Dans удалил бы <br />, но Вы хотите только <b>

0
ответ дан 8 December 2019 в 02:53
поделиться

Вот regex, который я записал с этой целью, он работает еще в нескольких ситуациях:

</?(?(?=b|img|a|script)notag|[a-zA-Z0-9]+)(?:\s[a-zA-Z0-9\-]+=?(?:(["",']?).*?\1?)?)*\s*/?>
0
ответ дан 8 December 2019 в 02:53
поделиться

При использовании регулярных выражений для синтаксический анализ HTML обычно не одобряется или игнорируется, вы почти наверняка не захотите писать свой собственный синтаксический анализатор.

Однако вы можете использовать некоторые встроенные или библиотечные функции для достижения того, что вам нужно.

  • JavaScript имеет getElementsByTagName и getElementById , не говоря уже о jQuery .
  • PHP имеет расширение DOM .
  • Python имеет потрясающий Beautiful Soup
  • ... и многое другое.
0
ответ дан 8 December 2019 в 02:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: