Многострочные регулярные выражения заменить теги внутри тегов?
Хочу заменить однострочным 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