AS3.0で文字列を置換する方法と注意点

このQ&Aのポイント
  • AS3.0で文字列を置換する方法について説明します。正規表現を使って文字列を置換することができますが、注意点もあります。
  • AS3.0では、文字列の置換には正規表現を使います。ただし、型がxmlの場合は文字列に変換する必要があります。
  • タグを含む文字列を置換する場合、タグの前後にある文字列も置換されるため、注意が必要です。タグを識別して置換する方法を検討するか、文字を置換または抜き出す方法を使用することができます。
回答を見る
  • ベストアンサー

AS3.0 タグ内の文字列を置換

Flash Pro CS5 AS3.0 で記述しています。 He <font color ="#00FFFF">gose</font> to library. という文章が bunsyo という変数に入っています。 外部xmlから取得し、この型はxmlです。 ここで、 He <font color ="#00FFFF">gose</font> to library. を He <font color ="#00FFFF">_______</font> to library. 又は He ________ to library. のように書き換えたいと思っています。 そしてそれをテキストフィールドに入れます。 空欄を見せて考えさせ、あとで元の文章(それが答え)を表示したいと考えています。 正規表現を使い var result:String = bunsyo.replace(/ >.+< /, "_____"); trace(result); と記述しましたが何も変化がありませんでした。。 型がxmlなのでstringにしないと置換してくれようです; テキストフィールドに入れる際に<font color ="#00FFFF"></font>のタグが使えなくなるので できればそのまま置換したいのですが… 型がxmlのまま置換するにはどのようにすればいいのでしょうか。 また,もし他にもタグを識別して置換するか文字を置換or抜き出す(今回はgose)方法がありましたら教えていただきたいです。 よろしくおねがいします。

  • Flash
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

おそらく正規表現を使えばできると思います。 新規ドキュメントを作成し フレームに記述(コピペ)するスクリプト例です↓。 -------------------------- //文章を設定 var str1:String = 'He <font color ="#00FFFF">gose</font> to library.'; //置換するパターン var pattern:RegExp = /<font color ="#00FFFF">.*?<\/font>/g; //置換後の文章を取得(複数ある場合は最短一致) var str2:String = str1.replace(pattern, '<font color ="#00FFFF">_______<\/font>'); //置換後の文章を出力窓に出力 trace(str2); -------------------------- または -------------------------- //文章を設定 var str1:String = 'He <font color ="#00FFFF">gose</font> to library.'; //置換するパターン(複数ある場合は最短一致) var pattern:RegExp = /<font color ="#00FFFF">.*?<\/font>/g; //置換後の文章を取得 var str2:String = str1.replace(pattern, "_______"); //置換後の文章を出力窓に出力 trace(str2); -------------------------- 「制御」→「ムービープレビュー」で出力窓を確認してみてください。 もし, タグに 「font color ="#00FFFF"」 が入っている入っていないに関わらず他の場合でも, 例えば文章が 「He <font size="4">goes</font> to library.」 の場合でも 「He <u>gose</u> to library.」 の場合でも 同様のことをする場合は次のようになります(???) (色々な場合でうまく行くかどうかはわかりません...) -------------------------- //文章を設定 var str1:String = 'I <font size="4">love</font> you. You <u>like</u> me.'; //置換するパターン var pattern:RegExp = />[^<]*<\//g; //置換後の文章を取得 var str2:String = str1.replace(pattern, '>_______</'); //置換後の文章を出力窓に出力 trace(str2); -------------------------- または -------------------------- //文章を設定 var str1:String = 'I <font size="4">love</font> you. You <u>like</u> me.'; //置換するパターン var pattern:RegExp = /<[^>]*>.*?<[^>]*>/g; //置換後の文章を取得 var str2:String = str1.replace(pattern, '_______'); //置換後の文章を出力窓に出力 trace(str2); -------------------------- この辺↓前後のページが参考になると思います。 「Adobe ActionScript 3.0 繰り返し制御文字」 http://help.adobe.com/ja_JP/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7eab.html 私は上記ページからリンクされている PDF ファイルをダウンロードして 7章と10章を熟読した上でなんとか考えて上記スクリプトを書きました。 結構アセアセにややこしいです(特に下のスクリプト2つ)。

ponyooon
質問者

補足

スクリプトまでご丁寧にありがとうございます。 私が書かせていただいたスクリプトの場合も、 変数bunsyoの型を xml→string と変換してから 正規表現を使った var result:String = bunsyo.replace(/ >.+< /, "_____"); trace(result); で書き換えられました。 しかし、String型ですと、テキストに入れる際にhtmlTextを使っても つまり test_txt.htmlText = result; としても <font color ="#00FFFF"></font>が色が変わるのではなく そのまま表示されてしまい困っています。 (xml型のときはちゃんと色が変わっていたのでおそらくそこが原因かと思いました) 質問の仕方が下手ですみません;

関連するQ&A

  • タグにはさまれている文字以外を置換したい

    あるマルチバイト文字列に対して、特定の文字を正規表現で置換したいのです。 そのマルチバイト文字列には、htmlの<a>タグが混じっています。(混じっていない場合もあります。) 置換したいのは、<a>タグで囲まれている文字以外の文字なのですが、正規表現としてどのようなパターンにすれば出来るのか悩んでおります。 ------------------------------------------------- //置換前のマルチバイト文字列 "朝一番のコーヒーは<a href="index.html">3時のコーヒーや</a>食後のコーヒーより旨い" //検索・置換対象となる文字列 "コーヒー" //置換を行う文字列 "紅茶" //置換後のマルチバイト文字列 "朝一番の紅茶は<a href="index.html">3時のコーヒーや</a>食後の紅茶より旨い" ------------------------------------------------- ↓こちらを参考にしてみたのですが、ちょっとやりたいことと違うみたいでうまくいきませんでした。 http://www.din.or.jp/~ohzaki/regex.htm#ReplaceOutside ================================================= $string = "朝一番のコーヒーは<a href="index.html">3時のコーヒーや</a>食後のコーヒーより旨い" $pattern = '/((?:\G|>)[^<]*?)コーヒー/'; $result = mb_ereg_replace($pattern, '\1紅茶', $string); echo $result; ================================================= 是非、皆様に力を貸して頂きたく、どうぞ宜しくお願い致します。

    • ベストアンサー
    • PHP
  • タグに詳しい方、助けて下さい!

    以下のようにタグを打って携帯サイト作ろうとしているのですが、携帯から確認すると途中からテーブルが左側に寄って見えるようになりました。(PCからだとちゃんと真ん中になってます) タグを引っ張ってきただけで知識はなく、どこがどうおかしいのかわかりません。 わかる人いたら教えて下さい…お願いします! <center><Table align="center" Border="0" Width="200" Valign="middle"> <Tr> <Td ColSpan="2" bgcolor="#FF69B4" Align="Center"><B><Font Color="#ffff33">★</Font><Font Color="#FFffff">更新・12/**</Font><Font Color="#ffff33">★</Font></B><Td></Tr><Tr><Td Width="600">※トップイラスト挿入※</Td><Td Width="20"><Font Color="#FF69B4"><Font Color="#ffff33">★</Font><br>*↓コンテンツ5行くらい<br><Font Color="#ffff33">★</Font></Font></Tr> <Tr><Td ColSpan="2" bgcolor="#FF69B4"><Marquee><Font Color="#ffffff">12/** ****</Font></Marquee></Td></Tr></Table></center>

  • タグをそのまま表示させるには

    <font color="#ffff00">・・・</font>などのタグをそのまま 表示させるにはどのようにすればいいのでしょうか? とりあえず下記のタグを試用してますが、<plaintext>以下が全部表示 になるので使いづらいのです。 よろしくお願いします。 <plaintext>

  • Dreamweaver4.0の「特定のタグ」の置換方法について教えてさい。(>_<)

    Dreamweaver4.0の置換機能を使って、下記のような置換をしたいと考えているのですが、なかなかうまくかず、困っています。 (T_T) <a href="任意のURL">任意のテキスト</a> ↓ <a href="任意のURL"><font color="#FFFFFF">任意のテキスト</font></a> aタグの後ろ(任意のテキストの前後)に、一意のフォントタグを挿入したいと考え、いろいろと試しているのですが、なかなかうまくいきません。 Dreamweaver置換の「特定のタグ」の置換機能を使用すれば、いけそうな感じがするところまでは辿りついたのですが。。。 ご存知のかたが、いらっしゃいましたら、お助けください。 よろしくお願いします。 m(_ _)m

  • JSPでの文字列編集出力

    JSPで文字列を読み込み、一部編集してデータベースに出力させようとしています。現在、文字列の編集の部分でうまくいかず困っています。 <tr> <td align="center"> </td> <td align="center">C 1</td> <td align="center">C 2</td> </tr> <tr> <td><font color="#FFFFFF">_</font>コスト</td> <td align="right"><font color="#FFFFFF">_</font>\ 200000<font color="#FFFFFF">_</font></td> <td align="right"><font color="#FFFFFF">_</font>\ 300000<font color="#FFFFFF">_</font></td> </tr> の内容を読み込み、タグを取り除き<tr>ごとに次の行として ,C 1,C 2 _,コスト,_,\200000,_,_,\300000,_ のように出力したいのです。 現在、String型で"<td"や">"と指定し、substring()やindexOf()を使いやっているのですが、 <td align="right"><font color="#FFFFFF">_</font>\ 300000<font color="#FFFFFF">_</font></td> のような、同じ行に2度出てくると初めしか文字列を取らなかったりしてうまくいきません。 違う方法や、アドバイスなどないでしょうか?また、XMLのDOMを使った方がいいのでしょうか?(XMLは全くわからないのですが、DOMを使えばもっと簡単にできるのでしょうか?) よろしくお願いします。

    • ベストアンサー
    • Java
  • HTMLのタグ属性で指定された特定文字列を置換する

    HTMLで、開始 < と終了 > に囲まれた特定の文字列を別の文字に書き替えたいのですが、思う通りに動かなくて困っており、質問させていただきます。 例えば以下の2行のHTMLがあったとします。  <font color="red">赤は英語でredです。</font>  <span style="color:red;">赤は英語でredです。</span> このHTMLで、タグの属性として使われている「color="red"」と「style="color:red;"」の部分だけ「red」を「black」に変更したいのです。 (文字列として使われている「英語でredです」の部分はそのまま) 秀丸やさくらエディタで正規表現を使って検索すると、 <.+?red.+?> で検索できましたがJavaでは検索ができません・・・。 コード: String strHtml = "<html><body><font color=\"red\">赤は英語でredです。</font><span style=\"color:red;\">赤は英語でredです。</span></body></html>"; Pattern pattern = Pattern.compile( "<.+?red.+?>", Pattern.DOTALL ); // 正規表現で検索 Matcher matcher = pattern.matcher( strHtml ); while( matcher.find() ){ System.out.println( "res=" + matcher.group( 0 ) ); } 出力結果: res=<html><body><font color="red"> res=</font><span style="color:red;"> res=<html><body><font color="red">赤は英語でredです。</font><span style="color:red;">赤は英語でredです。</span></body></html> エディタと同じように<font color="red">と<span style="color:red;">が取りたいのですが・・・、考え方もしくは正規表現が間違っているのでしょうか? お分かりの方がいましたら御助力いただけたら助かります。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 文字の置換?

    http://php.eweb-design.com/1301_mail.html さんから 文字コードEUC版をダウンロードさせいていただて、フォーム作成の勉強をしているのですが、疑問に思う点がいくつかあります。 if($esse == 1) { $flag = 0; $length = count($eles) - 1; foreach($_POST as $key=>$var) { $key = strtr($key, $string_from, $string_to); if($var == "eweb_submit") ; else { for($i=0; $i<=$length; $i++) { if($key == $eles[$i] && empty($var)) { $errm .= "<FONT color=#ff0000>「".$key."」は必須入力項目です。</FONT><BR>\n"; $flag = 1; } } } } の部分の $key = strtr($key, $string_from, $string_to); のところなのですが、$keyに含まれる文字から$string_fromを検索し$string_toに置換することだと思うのですが、、、$string_fromも$string_toも どこの記述を見ても文字列が代入されていません。 過去ログを見ると http://oshiete1.goo.ne.jp/qa3140724.html?ans_count_asc=2 // 文字の置き換え $string_from = "\"; $string_to = "ー"; のような記述があるようなのですが、私がダウンロードしたファイルにはありません。どなたか詳しい方がいらしたら教えてください。 あと、 //--- メールのレイアウトの編集 --- 開始 -------------------> $body="「".$sbj."」からの発信です\n\n"; $body.="-------------------------------------------------\n\n"; foreach($_POST as $key=>$var) { $key = strtr($key, $string_from, $string_to); if($var == "eweb_submit") ; else $body.="[".$key."] ".$var."\n"; } $body.="\n-------------------------------------------------\n\n"; $body.="送信日時:".date( "Y/m/d (D) H:i:s", time() )."\n"; $body.="ホスト名:".getHostByAddr(getenv('REMOTE_ADDR'))."\n\n"; //--- 終了 ---> というところで、 if($var == "eweb_submit") ; else $body.="[".$key."] ".$var."\n"; のようにifのあとにすぐelseがきているのはどうしてですか? まったくの初心者で、申し訳ないですが、 どうぞ、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 文字列の<>で囲まれた文字列を一括削除する方法

    サイトのソースで、本文に<br>、</div>などのHTMLタグが挿入されていますが、 これらのタグを一括して削除する方法はないでしょうか。 私が最初に試したのは、ソースをメモ帳に張り付けて、置換機能を利用して ワイルドカードを使い、<*>の文字列を空白に置き換える方法ですが、 上記のようなタグがあるにも関わらず、該当する文字列がないと エラー表示され置換できません。 具体的には、以下のように編集したいです。 (置換前) <div class="t_h ">7: <span style="color: green; font-weight: bold;">名無しさん</span> <span style="color: gray;"> 2013/09/26(木) 15:55:59.62 ID:FahaifvL0</span></div> <div class="t_b " > 山田太郎だったら営業に有利そうだな </div><br /> (置換後) 7: 名無しさん2013/09/26(木) 15:55:59.62 ID:FahaifvL0 山田太郎だったら営業に有利そうだな どなたかいい方法を教えていただけますでしょうか。 よろしくお願いします。

  • excel 色付き文字の置換について

    excel 色付き文字の置換について はじめまして、excel初心者です。 教えて頂きたい内容は、文字の置換方法です。 詳細 セル内の文字列の一部が色付きの時、その色付き文字だけを 他の文字に置き換えたいと思います。 ------------------------- (例 ここがポイントになります。 ------------------------- 例の”ポイント”が赤字だったときの結果として、 別のセルに次のように吐き出すにはどうすればよいでしょうか。 ------------------------- (結果 ここが<font color="#ff0000">ポイント</font>になります。 ------------------------- 結果のように、タグの付いた文字に置き換えたいと思っています。 また、結果は黒字で構いません。 初めての投稿で勝手がわかりませんが、 皆様のお知恵、アドバイを頂けますよう宜しくお願い致します。

  • AS3.0で取得した外部XMLの文字の一部に色付け

    Flash professional CS5を使用してAS3.0で記述しています。 外部XMLに文章が入っており,それを作成したテキストフィールドに入れます。 そして,その文章の一部の必要なところだけ文字の色を変えたいと考えています。 テキストボックスや文章を細切れにするのは大変だと思うのですがなにかやり方があるのでしょうか? プロパティインスペクタで細かい設定もできないですし; 例文として ・彼は何万人もの参加者から選ばれた というものを使うとします。 ここで 彼は何万人もの<sentence style="color:#0000FF;">参加者</sentence>から選ばれた のようにしてもflash(AS3.0)ではこの色のタグなどは識別不可能なのでしょうか? (stringなので単に文字列として認識されないとか。。) XML用のスクリプトはこのように記述しました。 var loader:URLLoader = new URLLoader(); var urlReq:URLRequest = new URLRequest("sample.xml"); loader.load(urlReq); loader.addEventListener(Event.COMPLETE, onLoaded); function onLoaded(eventObj:Event):void{ var item:XML; var xmlObj:XML = new XML(loader.data); var wordList:XMLList = xmlObj.sentence; item = wordList[0]; test_txt.text = item.text(); } よろしくお願いいたします。

専門家に質問してみよう