Movable Typeで余計なスペースと改行を削除する 其之二

以前、「MTが構築するHTMLソースの空白と改行を削除する」という記事を書いたんですが、もっといい方法を見つけました。こんなの(↓)。

<MTFor regex_replace="/^\s+(<|(--|\/|\?)?>)/mg","$1" trim="1">
  
  <!--余計なスペースと改行を削除したいコードをここに記述-->
  
</MTFor>

グローバルモディファイアの regex_replace="/^\s+(<|(--|\/|\?)?>)/mg","$1" の部分を解説すると、「行頭に続く連続する空白文字列から <, -->, />, ?>, > のいずれかの文字列までを <, -->, />, ?>, > だけにする」っていう意味になります。

例えば、半角スペースを &nbsp;、改行を \n で表現した以下のようなコードがあった場合、赤で示した部分が置換対象になります。

<MTFor regex_replace="/^\s+(<|(--|\/|\?)?>)/mg","$1" trim="1">\n
\n
&nbsp;&nbsp;<?xml\n
&nbsp;&nbsp;&nbsp;&nbsp;version="1.0"\n
&nbsp;&nbsp;&nbsp;&nbsp;encoding="UTF-8"\n
&nbsp;&nbsp;?>\n
\n
&nbsp;&nbsp;<html\n
&nbsp;&nbsp;&nbsp;&nbsp;lang="ja"\n
&nbsp;&nbsp;>\n
\n
&nbsp;&nbsp;<pre>&nbsp;&nbsp;整形済文字列\n
\n
&nbsp;&nbsp;整形済み文字列\n
\n
&nbsp;&nbsp;整形済み文字列</pre>\n
\n
&nbsp;&nbsp;<img\n
&nbsp;&nbsp;&nbsp;&nbsp;src="画像のURL"\n
&nbsp;&nbsp;&nbsp;&nbsp;alt="画像の代替文字列"\n
&nbsp;&nbsp;/>\n
\n
&nbsp;&nbsp;<!--\n
&nbsp;&nbsp;&nbsp;&nbsp;HTMLコメント\n
&nbsp;&nbsp;-->\n
\n
</MTFor>

最後の </MTFor> の前に存在する緑で示したスペースと改行を、もう一つ指定したグローバルモディファイア trim="1" で削除すれば完璧です。

<?xml\n
&nbsp;&nbsp;&nbsp;&nbsp;version="1.0"\n
&nbsp;&nbsp;&nbsp;&nbsp;encoding="UTF-8"\n
?>\n
<html\n
&nbsp;&nbsp;&nbsp;&nbsp;lang="ja"\n
>\n
<pre>&nbsp;&nbsp;整形済文字列\n
\n
&nbsp;&nbsp;整形済み文字列\n
\n
&nbsp;&nbsp;整形済み文字列</pre>\n
<img\n
&nbsp;&nbsp;&nbsp;&nbsp;src="画像のURL"\n
&nbsp;&nbsp;&nbsp;&nbsp;alt="画像の代替文字列"\n
/>\n
<!--\n
&nbsp;&nbsp;&nbsp;&nbsp;HTMLコメント\n
-->

一見するとまわりくどくて「なんのこっちゃ」って感じですが、こうすることで、pre要素やtextarea要素、script要素などの内側に記述された、スペースや改行をそのまま反映させたい部分を除外しつつ、その他のスペースと改行だけを削除できるんです。

「あと、ここのスペースと改行も削除したいんだよね」って部分は、その部分だけ別の正規表現で置換してあげればOKです。