Многострочные регулярные выражения заменить теги внутри тегов?

Хочу заменить однострочным b/h2/h3/h4/h5 теги внутри blockquote теги, с h6 теги.

Итак, я хочу это:

^<[b|h[2-5]]>([^\.]+)</[b|h[2-5]]>$

быть замененным этим:

<h6>\1</h6>

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

1 ответ

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

Это сказанное: эта демонстрация может начать вас.

Это не имеет дело с крайними случаями.

<div><b>This thing</div></b>

не будет анализировать должным образом.

Если вы знаете, что ваш вклад правильно сформирован и не имеет слишком глубокого вложения (a <b> в пределах <h2> в чем-то другом, например), тогда это может сработать. Но для разбора HTML вам действительно нужен анализатор DOM.

Теперь это не обрабатывает "между blockquote тег ", но с Javascript (если это то, что вы используете), это не очень простой пример задачи. Вы должны по сути запускать один и тот же процесс снова и снова, чтобы преобразовать все элементы в h6,

Если бы вы использовали вместо этого jQuery, вы могли бы сделать это намного безопаснее: jsfiddle

Другие вопросы по тегам