AS3.0では、文字列を直接指定しないで「特徴」(パターン)を指定する 正規表現 というものを使うことができるようになりました。
これを使えば、splitやindexOfを使うと工夫が必要だったことも、少ないスクリプトで簡単に取り出せるようになります。
今回は、imageタグに含まれたsrc属性を取り出すサンプルで追ってみます。
----
以下の文字列からimageタグに含まれたsrc属性だけを取り出す。
<a href='http://www.f-site.org/'><img src='image1.jpg' alt='image1'><img width='320' height='240' src='image2.jpg'></a>
----
まず、目で見てみると
src='なにか'という記述を探すんだな。
と見えてくると思います。
ですが、既存のsplitやindexOfを使って臨むと
・imgタグだけならいいがaタグにも囲まれているな。
・srcの位置がimage1、image2でも違うのでどうしようか。
・シングルクォーテーション「 ' 」に囲まれたものを軸に取り出そうとすると必要ないものも取り出しそう。
・そういえばhtmlって書き方は幅広いし、どこまで想定しよう。
・目で見ると、srcの位置がすぐ分かるのに。スクリプトだとなんだか大変そう。
と、(あくまで私視点ですが)なかなかに大変だと思うところがあります。
これはおそらく、
splitやindexOfは、本来、固定の文字列で検索するのに適していて
こういった曖昧なものを相手にしたとたんに
「考えうる様々なパターン」を意識せざる得ないからでしょう。
さて、前置きが長くなりましたが、
AS3.0新機能「正規表現」を利用すると曖昧なままでも取り出せるようになります。
----
[サンプル:imageタグに含まれたsrc属性を取り出す]
package {
import flash.display.Sprite;
public class pRegExpAS3 extends Sprite {
public function pRegExpAS3()
{
// 取り出す対象
var myStr:String = "<a href='http://www.f-site.org/'><img src='image1.jpg' alt='image1'><img width='320' height='240' src='image2.jpg'></a>";
// src='なにか' を分離する正規表現
var myPattern1:RegExp = new RegExp( "src=\'(.*?)\'" , "ig" );
// この場合、src='image.jpg' が取り出されます。
var aMatch1:Array= myStr.match( myPattern1 );
// src='image1.jpg',src='image2.jpg' が表示されます。
trace( aMatch1 );
}
}
}
というわけで、こんな短い記述でとりだせます。
さらに言えば、上記のコードを成長させていくと、きっとhtmlタグの中から画像情報だけ取り出してリストアップする・・・なんてのも自由自在でしょう。(それはそれで大変でしょうが、夢を託したくなってきます。)
それでは、ご説明したサンプルソースも以下に置きます。ご参考ください。
▲免責事項▼
このサンプルを使用した場合のいかなる損害も、
制作者 田中正吾 及び F-site は、その責を負いません。
ご自身の責任においてご使用ください。
_____________________________________________________
参考文献