TopJavaScript > 2013年4月
2013年4月 2日

JavaScriptの正規表現で文字列を抜き出す「グループ化」

April 2,2013 12:33 AM
Tag:[]
Permalink

JavaScriptの正規表現で特定の文字列を抜き出す「グループ化」について解説します。

グループ化

JavaScriptで特定の文字列を抜き出して処理したいことがよくあるのですが、グループ化の使い方を忘れてネットで検索してもなかなかヒットしないので、備忘録で残しておきます(他に適切な方法があるようでしたらすいません)。

1.特定の文字列を抜き出す

まず基本として、特定の固定文字列を抜き出すには、match関数で次のように記述します。

var foo = 'abcdefg';
var bar = foo.match(/abc/);

これは変数fooに「abc」という文字が含まれていれば、変数barに

abc

が設定されます。

変数fooに「abc」という文字が含まれていない場合、変数barにnullが設定されます。

この使い方は、検索したい文字列があらかじめ決まっていて、上記のような代入文ではなく、判定文で使うケースが多いのではないかと思われます。

if (foo.match(/abc/)) {
    // ...
}

2.正規表現で不定の文字列を抜き出す

1項はすでに分かっている文字列を抜き出しましたが、不定の文字列を抜き出すには、match関数の正規表現に次のように指定します。ちなみに1項も正規表現の一種で、リテラル文字を指定しているケースです。

var foo = 'abc123defg';
var bar = foo.match(/\d+/);

正規表現に含まれる「¥d+」は、1文字以上の連続した数字だけを抜き出すためのメタキャラクタを意味し、変数barには

123

が設定されます。

この場合、単純な文字列であれば使えますが、

var foo = 'abc123def456ghi';

から「456」を抜き出したい場合には使えません。

3.グループ化を使って文字列を抜き出す

2項の例で「456」だけを抜き出したい場合、次のようにグループ化を利用します。

var foo = 'abc123def456ghi';
var bar = foo.match(/^.*\D+(\d+)\D+$/);

「(¥d+)」というカッコで括った部分がグループ化です。

この場合、変数barには配列が設定され、配列の0番目である"bar[0]"に、文字列

abc123def456ghi

が設定され、配列の1番目である"bar[1]"に、グループ化で取得した文字列

456

が設定されます。

注意点として、配列の0番目はすべての文字列が設定されるのではなく、正規表現でマッチした部分のみが設定されます。

上のサンプルで配列の0番目にすべての文字列が設定されているのは、正規表現ですべての文字にマッチするように記述しているためです。

したがって、たとえば、

var bar = foo.match(/(\d+)\D+$/);

とすれば、配列の0番目には

456ghi

だけが設定されることになります。

正規表現の部分の書き方は上記以外にも色々あると思いますので試してみてください。

4.グループ化を使って複数の文字列を抜き出す

グループ化では一度に複数の文字列を抜き出すことができます。

3項の例で、「123」と「456」を抜き出したい場合は次のように記述します。

var foo = 'abc123def456ghi';
var bar = foo.match(/^\D+(\d+)\D+(\d+)\D+$/);

配列の0番目である"bar[0]"に、文字列

abc123def456ghi

配列の1番目である"bar[1]"に、1つめのグループ化で取得した文字列

123

配列の2番目である"bar[2]"に、2つめのグループ化で取得した文字列

456

が設定されます。

5.後方参照を行わない場合のグループ化

話がちょっとそれますが、4項までで説明したグループ化は、グループに一致する文字が記憶されることで、配列への格納やいわゆる「後方参照」という技が使えます。

が、単に見やすさなどのためのグループ化を行いたいのであれば、グループ化の先頭に「?:」を付与して、記憶しないようにすることができます。

var foo = 'abc123def456ghi';
var bar = foo.match(/^\D+(?:\d+)\D+(?:\d+)\D+$/);

この場合、「123」「456」は配列に格納されません。また、後方参照も行えません。

Comments [0] | Trackbacks [0]
Now loading...
ギターに入った猫
掲載広告募集
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner

AMN
Categories
Monthly Archives
2020年
2019年
2018年
2017年
2016年
2015年
2014年
2013年
2012年
2011年
2010年
2009年
2008年
2007年
2006年
2005年
2004年
2003年
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
Powered by
Movable Type 6.0.3