2012年07月22日

JavaScriptと正規表現

JavaScriptで正規表現を利用する方法

特定のテキストを含むかどうか確認(testメソッドとexecメソッド)
特定のテキストの開始位置を取得(searchメソッド)
マッチした文字を取得(matchメソッド)
マッチした文字を置き換える(replaceメソッド)

特定のテキストを含むかどうか確認(testメソッドとexecメソッド)

特定のテキストを含むかどうか確認するにはtestメソッドとexecメソッドがあります

testメソッド

testメソッドは特定のテキストを含む場合trueを、含まない場合はfalseを返します。単純なマッチングに利用するのが良いでしょう。

var txt = "hogehoge";
console.log(/hoge/.test(txt));//true
console.log(/hage/.test(txt));//false


execメソッド

execメソッドではマッチした結果を配列で返します。

var txt = "hogehoge";
console.log(/hoge/.exec(txt));//["hoge"]
console.log(/hoge/g.exec(txt));//["hoge"]
console.log(/hage/.exec(txt));//null


testメソッドとexecメソッドはRegExpオブジェクトのメソッドのため正規表現から記述する必要があります。

特定のテキストの開始位置を取得(searchメソッド)

searchメソッドはマッチした文字列の位置を返します。マッチした場合、マッチした場所を返します。

var txt = "hogehoge";
console.log(txt.search(/hoge/));//0
console.log(txt.search(/hoge/g));//0
console.log(txt.search(/hage/));//1


次のような単純なif文では指定したテキストが最初にある場合をチェックしてしまいます。

if(txt.search(/hoge/)){
//do smoething
}


といった具合に-1とマッチさせるようにしましょう。

if(txt.search(/hoge/)===-1){
//do smoething
}


マッチした文字を取得(matchメソッド)

matchメソッドはマッチした文字列を取得できます。

var txt = "hogehoge";
console.log(txt.match(/hoge/));//["hoge"]
console.log(txt.match(/hoge/g));//["hoge","hoge"]
console.log(txt.match(/hage/));//null


g(global)オプションを付けることによりマッチ結果を複数取得することができます。

マッチした文字を置き換える(replaceメソッド)

replaceメソッドは第2引数に置き換え文字列を指定することで文字列の置き換えを行ないます。

var txt = "hogehoge";
console.log(txt.replace(/hoge/,"foo"));//foohoge
console.log(txt.replace(/hoge/g,"foo"));//foofoo
console.log(txt.replace(/hage/,"foo"));//hogehoge


文字列そのものを置き換えるのではなく置き換えた文字列を返すので注意してください。また、置き換え文字列に$&を利用するとマッチした文字列を置き換えの際に利用できます。

var txt = "hogehoge";
console.log(txt.replace(/hoge/,"A$&A"));//AhogeAhoge
console.log(txt.replace(/hoge/g,"A$&A"));//AhogeAAhogeA
console.log(txt.replace(/hage/,"A$&A"));//hogehoge


複数のマッチ文字を利用したい場合は、マッチ時に()でつつみ置き換え文字内で$1〜の文字列を利用します。

var txt = "hogehoge";
console.log(txt.replace(/(h)o(g)e/,"$1$2"));//hghoge
console.log(txt.replace(/(h)o(g)e/g,"$1$2"));//hghg
console.log(txt.replace(/(h)a(g)e/,"$1$2"));//hogehoge


replaceメソッドでは置き換え文字の代わりに関数オブジェクトを足すことができます。

var num = "123456";
num.replace(/[0-9]/g,function(num){
if(num<4){
return num
}else{
return ""
}
})


上記のサンプルでは「123」が帰ってきます。
posted by ねこまんま at 19:20 | Comment(0) | TrackBack(0) | Ajax | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック