問答収集 カテゴリ:Flashプログラミング
現在のスレッド一覧 / 新規に質問を投稿
レス数:6 / 状態:解決済み / No:40 / ATOM
1 名前:k 日付:2010/07/19(月)23:33:18 ID:9kJEWPZA4knz
毎回お世話になっております。
as3.0の正規表現についての質問です。

正規表現で()でくくった中身を後で取り出したいのですが、方法が分かりません。

ちょうど、JavaScriptではこのような感じです。
var r = new RegExp("a(.)c");
"abc".match(r);
alert(RegExp.$1);

これをActionScript3.0でしようとすると、エラーが出ます。
var r:RegExp = new RegExp("a(.)c");
"abc".match(r);
trace(RegExp.$1);

方法をご存知の方は、ご教授願います。
2 日付:2010/07/20(火)18:59:55 ID:qPr0YUEfJmUW
match() メソッドの戻り値から配列を取得できます。

var r:RegExp = new RegExp("a(.)c");
var ary:Array = "abc".match(r);

var i:int;
var n:int = ary.length;
for(i=0;i<n;i++){
trace(i,ary[i]);
}
3 名前:k 日付:2010/07/20(火)23:43:29 ID:9kJEWPZA4knz
すばやい回答、ありがとうございます!

もうひとつ聞きたいのですが、
replace()メソッドを使ったとき、同じように後から取り出したいときは、
どのようにすればいいのでしょうか?

replace()の戻り値はStringですし、無理でしょうか?
4 日付:2010/07/21(水)00:37:35 ID:yDl4tzgDJCHR
replace() メソッドの使用例を見るとこんな感じでしょうか。
http://help.adobe.com/ja_JP/Flash/CS5/AS3LR/String.html#replace()

var r:RegExp = new RegExp("a(.)c");
var str:String = "abc".replace(r,"$1");
trace(str);
5 名前:k 日付:2010/07/21(水)23:34:06 ID:9kJEWPZA4knz
なるほど…
では、キャプチャだけを取り出そうと思ったら、
全文に一致するようにしないと駄目なのでしょうか。

var r:RegExp = new RegExp("a(.)c");
var str:String = "123abc123".replace(r,"$1");
trace(str);   // これだと "123b123"

var r:RegExp = new RegExp("^.*a(.)c.*$");
var str:String = "123abc123".replace(r,"$1");
trace(str);   // これなら "b"


最初の質問とは外れますが、
元々の文字列をreplace()で変更しつつ、キャプチャを取得するには、

正規表現を一回だけ使って、
var origin:String = "123abc123";
origin = origin.replace(/a(.)c/,"$1");   // originを変更
var str:String = RegExp.$1;   // strにキャプチャを代入

とすることはできず、
今まで回答してくださったのに習うと、

var origin:String = "123abc123";
var str:String = origin.match(/a(.)c/)[1];   // strにキャプチャを代入
origin = origin.replace(/a(.)c/, "$1");   // originを変更

または

var origin:String = "123abc123";
var str:String = origin.replace(/^.*a(.)c.*$/, "$1");   // strにキャプチャを代入
origin = origin.replace(/a(.)c/, "$1");   // originを変更

とするのが良さそうですね。

正規表現について、まだまだ知るべきことがありそうです。
ご回答、ありがとうございました。
6 名前:状態変更 日付:2010/07/21(水)23:34:59 ID:9kJEWPZA4knz
この質問の状態を『解決』に変更しました。
このスレッドについて
質問の状態 :
解決済み
投稿開始日 :
2010/07/19(月)23:33:18
投稿終了日 :
2010/07/21(水)23:34:59
投稿者 :
k
レス総数 :
6
スレッド番号 :
40
MondoCollectionSystem ver.0x00020000 by Hakuhin