- ベストアンサー
正規表現でタグの中身を抜き取り変数に入れたい
- Flash Pro CS5とAS3.0で正規表現を使用してHTMLタグ内のテキストを抜き出し、変数に格納したいです。
- 具体的には、<font>タグで囲まれた中身を抜き取りたいです。
- また、2つ目の文章に関しては、「laid」および「off」の部分を1つの変数に入れたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
次の2つのうちどちらかでできると思います。 2つの違いは,最初のデータをどのように用意するかの違いです。 ---------------------------------------------------------- //とりあえず文字列を 変数str1 と str2 に分けて用意する(?) var str1:String='<font color="#cc0033">Laid off</font> a lot of workers.'; var str2:String='They <font color="#cc0033">laid</font> us <font color="#cc0033">off</font> for a month.'; //関数getStrの定義(引数s:文字列) function getStr(s:String):void { // //引数 sを 「</font>」で区切った配列1を作成する var arr1:Array=s.split('</font>'); // //配列2を作成する var arr2:Array = new Array(); // //配列 arr1 の要素数-1 ループさせる for (var i:int = 0; i < arr1.length-1; i++) { //配列arr1の各要素を「>」で区切った配列3を作成する var arr3:Array=arr1[i].split(">"); //配列3の最後の要素をつなげた配列2にする arr2.push(arr3[arr3.length-1]); } // //arr2を出力させてみる trace(arr2); } //関数getStrを実行(引数str1) getStr(str1); //関数getStrを実行(引数str1) getStr(str2); ---------------------------------------------------------- ---------------------------------------------- //とりあえず分けない文字列全文を用意する(?) var str:String='<font color="#cc0033">Laid off</font> a lot of workers.They <font color="#cc0033">laid</font> us <font color="#cc0033">off</font> for a month.'; //strを「.」で区切った配列arrを作成 var arr:Array=str.split('.'); //arrの要素数分ループ for (var i:int = 0; i<arr.length; i++) { //関数getStrを実行(引数arr[i]) getStr(arr[i]); } //関数getStrの定義(引数s:文字列) function getStr(s:String):void { // //引数 sを 「</font>」で区切った配列1を作成する var arr1:Array=s.split('</font>'); // //配列2を作成する var arr2:Array = new Array(); // //配列 arr1 の要素数-1 ループさせる for (var i:int = 0; i < arr1.length-1; i++) { //配列arr1の各要素を「>」で区切った配列3を作成する var arr3:Array=arr1[i].split(">"); //配列3の最後の要素をつなげた配列2にする arr2.push(arr3[arr3.length-1]); } // //arr2を出力させてみる trace(arr2); } ----------------------------------------------
その他の回答 (2)
- hi_kurokun
- ベストアンサー率45% (20/44)
以下の構文で出来そうです。(一応確認しました) //----------------------------------------------------- var Patt1:RegExp = /<\/font>.*<font [^>]*>/g; var Patt2:RegExp = /^.*<font [^>]*>/; var Patt3:RegExp = /<\/font>.*$/; var str1:String = "文字列"; str1=str1.replace(Patt1, ","); str1=str1.replace(Patt2, ""); str1=str1.replace(Patt3, ""); //------------------------------------------------------- 注意:文字列の中に<font ・・・>・・・</font>が無い時はstr1の値は変化しません。 <font ・・・>・・・</font>が対が正しときも正常には動きません 正規表現の説明 Patt1はすべての/<\/font>.*<font [^>]*>/を”,”に置換 つまり</font>・・・<font ・・・>を”,”に置換 <\/font> -> </font> .* -> 任意の文字を任意個 <font [^>]*> -> <font ・・・> [^>]*は”>”以外の文字を任意個(これで最初の”>”範囲になります) Patt2は /^.*<font [^>]*>/を削除(Patt1があるのでgは不要) つまり・・・<font ・・・>を削除 ^.*は文字列の最初から任意文字任意個 Patt3は /<\/font>.*$/を削除(Patt1があるのでgは不要) つまり</font>・・・を削除 .*$は任意文字任意個で最後まで "[^>]*"のところで迷ってしまいました。 最初に<font .*>でTESTしてうまく動きませんでした。
お礼
なるほど! とてもシンプルでわかりやすいです。 大変勉強になりました。 どちらの回答者様をベストアンサーにするかとても迷いましたが 投稿時間の早さで決めさせていただきました。 ありがとうございました。
- deka0831
- ベストアンサー率36% (60/166)
秀丸の、置換やマクロではいかがでしょうか?
補足
文章はすでに決まったXMLから取得し,変数内に入れてあるものなので, 正規表現などによりプログラム内で書き換えたいと考えています。
お礼
毎回素早いご回答ありがとうございます。 応用が効くプログラムをありがとうございました。 無事完成させる事ができました。 もっと勉強して色々使いこなせるようになりたいです。 ありがとうございました。