• 活用ブログTOP
  • 正規表現を利用して本文から特定のHTMLタグを削除する方法
hayase hayase

正規表現を利用して本文から特定のHTMLタグを削除する方法

メディアサイトを運営している場合に、特定のアプリやメディアで掲載してもらうために決まった出力フォーマットが必要な場合があります。

その場合は通常の記事テンプレートとは別のテンプレートを用意し、指定されたフォーマットにあわせた出力を行います。

今回は以下の指定があったと仮定して、実際の出力方法について説明していきます。

  • 画像は削除したい
  • リンクタグを削除したい

こういったケースはキュレーション系のアプリやサイトであるかと思います。

では、実際の例を見ていきます。ブロックエディタによって出力された記事の本文のHTMLソースが以下だとします。

<p>テキスト文章です。</p>
<p><img src="https://example.com/image.jpg" alt="" width="640" height="427" class="asset asset-image" style="max-width:100%;height:auto;display:block"/></p>
<p>これは<a href="http://movavabletype.net/">リンクテキスト</a>です。</p>

この中から画像のimgタグとリンクのaタグを削除していきますが、正規表現を利用して文字列を置き換えることが可能なグローバルモディファイアのregex_replaceを利用します。

記事の本文に対して削除を行いたいので、具体的には以下のように記載します。

<$mt:EntryBody regex_replace="/<\/?(?:a|img).*?>/ismg","" regex_replace="/<p[^>]*>\s*<\/p>/ig",""$>

もし、削除したい対象を増やしたい場合は前半のregex_replaceのa|imgの箇所をh1|h2|h3|a|img|objectなどに置き換えることによって実現できます。後半のregex_replaceでは空のpタグの削除を行っています。

上記の指定による出力は以下になりimgタグaタグ、imgタグがなくなり空になったpタグが削除されました。

 <p>テキスト文章です。</p>
<p>これはリンクテキストです。</p>

このように正規表現によって検索文字列を置換文字列に置き換える、ということがregex_replaceモディファイアを利用すれば可能です。

出力ソースの文字列の置き換えが必要になる、といった場合にぜひご活用ください。