_正規表現を使う その2

Stringクラスの中の一部のメソッドは、正規表現と一緒に使う事ができます。
簡単に使う事ができそうなので、覚えておくと役に立つはずです。
まずは、match()から使っていこうと思います。

match()

match()メソッドは、パターンに一致した箇所を配列として返します。
当てはまる部分がない場合はnullを返します。

パターンのgフラグを付けると、文字列全体を検索します。
var text:String = "1988, 1990, 1995, 1997, 2001";
var pattern:RegExp = /199./g;
var list:Array = text.match(pattern);
trace(list);//出力1990, 1995, 1997
match()は、パターンの中にグループがあるときに、マッチした全体とグループでマッチした部分を配列に分けて返します。 次のは、前のエントリーで使ったRegExpクラスのexec()を使った拡張子のサンプルをmatch()で書き換えました。
var file:String = "photo.jpg";
var pattern:RegExp = /(\w+)\.(\w+)/;
var list:Array = file.match(pattern);
 
if(list != null) {
	var matchString:String = list[0];
	var filename:String = list[1];
	var suffix:String = list[2];
	trace(matchString);//photo.jpg
	trace(filename);//photo
	trace(suffix);//jpg
}

search()

search()メソッドは、最初に見つかった位置のインデックス番号を返します。
見つからなかった場合は、-1で返します。
var text:String = "Macintosh iPhone iTune";
trace(text.search(/Macintosh/));// 0

var pattern:RegExp = /iPhone/;
trace(text.search(pattern));// 10

trace(text.search(/iPod/));// -1

replace()

replace()メソッドは、ストリングを正規表現で検索し、引数で指定したテキストに置換します。
replace()は、置換した後に新しいストリングを作り、置換の対象にした元のストリングは変更しません。
次のは、"Red"を"Black"に置換します。ただ、置換するのは最初に見つけた"Red"だけです。
var text:String = "Red Bicycle, Red Car";
var newText:String = text.replace(/Red/, "Black");
trace(newText);//Black Bicycle, Red Car
見つけたパターンをすべて置換するには、正規表現にフラグのgを付けます。
var text:String = "iPhone iPod";
var newText:String = text.replace(/i/g, "I");
trace(newText);//IPhone IPod
次は、パターンで見つけた部分を削除しています。削除するには、""を指定します。
また、改行を取り除くときには、
\
nを指定します。
var date:String = "2009-03-20";
var reDate:String = date.replace(/-/g, "");
trace(reDate);//20090320
追記(3/30):改行コードには以下の種類があるので、
\
nだけでは、不十分です。
参考:文字列の中から改行をとりのぞきたい|_level0.KAYAC
  1. CR =
    \
    r
  2. LF =
    \
    n
  3. CR+LF =
    \
    r
    \
    n
ですので、CRとLFに対応させるには以下の方法で。
//\nを削除
reDate:String = reDate.replace(/\n/g, "");
//\rを削除
reDate:String = reDate.replace(/\r/g, "");
replace()メソッドには、置換テキストに使用できる置換コードが用意されています。
コード 置き換える文字
$$ $で置き換えるにはSSと書く
$& マッチしたテキスト
$' マッチした位置の前方のテキスト('は本当は左シングルクォーテーション。入力方法が分からなかった。)
$' マッチした位置の後方のテキスト
$n グループマッチのn番目(nは0-9)
$nn グループマッチのnn番目

たとえば、$&を使うと検索した文字に()をつける事もできます
var text:String = "Macintoshmac";
trace(text.replace(/mac/g, "($&)"));//Macintosh(mac)
これを応用するとURLを<a>タグで囲む事もできます。
var myUrl:String = "詳しくはhttp://paphead.comまで";
var pattern:RegExp = /http:\/\/.*?\.com/g;
var reUrl:String = "<a href=\"$&\">$&</a>";
var newUrl:String = myUrl.replace(pattern, reUrl)
trace(newUrl);//詳しくはhttp://paphead.comまで

このエントリーをTwitterでつぶやく (投稿画面に飛びます)

Comment Form
 

Trackback:0

TrackBack URL for this entry
http://paphead.com/mt/mt-tb.cgi/30
Listed below are links to weblogs that reference
_正規表現を使う その2from PAPHEAD

ayuzak

ディレクターをしています。
このブログは、自分自身のメモとして運営しています。

もっと見る

twitter

@paphead
カテゴリ

なかのひと