MT:Plugin:RegexList:リスト作成に便利なRegular Expression拡張プラグイン

Movable Typeのテンプレートの置換を拡張したRegexListプラグインについてです

RegexList はRick Bychowsk (Hiranyaloka)氏(http://hiranyaloka.com)によりリリースされたプラグインです。

この記事のタイトルでは、「リスト作成」とかつけてしまいましたが、正確には Regex でマッチ(サーチ?)したものを配列にpushしてくれるといった動作のプラグインのようです。

ダウンロード

Downloads のところより入手可能です。

ファイル展開後のRegexListをpluginsディレクトリに収めます。

動作確認

使ってみないことにはご紹介というわけにもいかないので、とりあえずインデックステンプレートでカスタムテンプレートを組んで動作を確認してみました。

当方がが試したのは、MTOS-5.14-ja 上で、特に外部の依存モジュールはないようなので、ローカルで設置したMTOSのみで確認を行いました。

基本的な書式は、regex_replace のように、regex_list="","","" 3つ目の値に区切りとなる文字列のマッチパターンを書きます。

グローバルフィルターなので、任意のテンプレートタグに付与して使うことが出来ます。

プラグインの詳細は、README.markdown に記載されています。これを参考にサンプルを作りました。

1. カンマ区切りな文字列からリストを生成する

<mt:Setvar name="test1" value="apple,bannana,melon,kiwifruit">
<$mt:Var name="test1" regex_list="/(.+)/","$1","/([^,]+)/" setvar="thelist1"$>
<$mt:var name="thelist1"$>

<ul>
<mt:Loop name="thelist1">
<li><mt:Var name="__value__"></li>
</mt:Loop>

2. \u \l \U \L プレフィックスをつかった置換

\u \l がそれぞれ upper-case と lower-case。

大文字のほうの\U \Lですが、小文字のほうとの違いは、キャプチャされている文字全部に(\Eがつけられる前まで)その影響がおよびます。

以上を踏まえて、文字列を先頭1文字を大文字、以降を小文字に整形して出力するものが以下のテンプレートです。

<mt:Setvar name="test2" value="aPple,baNNnana,Melon,kiWiFruit">
<$mt:Var name="test2" regex_list="/(.)(.+)/","\u$1\L$2\E","/([^,]+)/" setvar="thelist2"$>
<ul>
<mt:Loop name="thelist2">
<li><mt:Var name="__value__"></li>
</mt:Loop>
</ul>

3. キー、ハッシュ風の記法からページ内リンクリストを生成

「フラグメント」: 「タイトル」, 「フラグメント」: 「タイトル」
といったルールのテキストを変数にセットしておいて、これを元にして、ページ内リンクを生成するというテンプレートです。

<mt:SetVars>
internal=t2:Title2, t3:Title3, t4:Title4, t5:Title5
</mt:SetVars>

<$mt:Var name="internal" regex_list="/(?:[\s]+)?(.+):[\s+]?(.+)/","<a href="#$1">$2</a>","/([^,]+)/" setvar="thelist3"$>

<ul>
<mt:Loop name="thelist3">
<li><mt:Var name="__value__"></li>
</mt:Loop>
</ul>

まとめ

もう少し複雑な例とか思いついたのですが、当方のスキルがいっぱいいっぱいなのでこの辺で。

RegexList をうまく活用すると標準のテンプレートタグのみでは複雑に組まなくてはならない場合を解決できることがあります。

なお、このプラグインはどの値を push したかをブログのログに記録するようになっています。ログはブログのツール>ログ からみられます。

Comments:

コメントをどうぞ。書き込む場所が不明な場合やサイトオーナーへのコンタクトは、GuestBookまでお気軽にどうぞ

blog comments powered by Disqus