SAMPLE
●概要
正規表現はper,php,javaあらゆる言語に実装されおり、Javascripitも例外なく実装されています。
正規表現の説明については、たくさんのサイトで紹介されているので割愛します。
●正規表現パターンの定義
基本的には、2通りあります。
var rep = /\D+/;
var rep = new RegExp('\\D+');
前者はRegExpリテラルと呼びます。スラッシュ(/)で囲んで表現します。プログラムに直接記入するので、プログラム実行時に動的に変更できません。
後者はRegExpオブジェクトと呼びます。文字列として組み込むため、プログラム実行時、動的に変更可能。
文字列として表現するため、正規表現の特殊文字にエスケープが必要となります。
●正規表現フラグをつける場合
RegExpリテラル、RepExpオブジェクトそれぞれで定義方法が異なります。
var rep = /^hello.+world/i;
var rep = new RegExp('^hello.+world','i');
RegExpリテラルは末尾につけます。
RegExpオブジェクトの場合は、第2引数につけます。
●対象文字列にマッチする文字列が含まれるかチェック
testメソッドを使用します。(リテラル、オブジェクトどちらも同じ)
var judge =rep.test('hello world, javascript');
boolean値が戻ってきます。
●対象文字列からマッチする文字列を抽出
文字列オブジェクトのmatchメソッドを使用します。(リテラル、オブジェクトどちらも同じ)
var judge = 'hello 321456,javascript 5464554'.match(rep);
マッチしない場合、nullが戻ってきます。
●対象文字列からマッチする文字列を全て抽出
マッチする箇所が複数ある場合、execメソッドをnullになるまで、なんども実行することで、マッチ文字列を全て取得できます。(リテラル、オブジェクトどちらも同じ)
※正規表現パターン定義時、正規表現フラグ'g'をつけること
var rep = new RegExp('\\d+','g');
var target = 'hello 321456,javascript 5464554 world';
var result = new Array();
while((matchArray = rep.exec(target)) != null){
result.push(matchArray[0]);
}
●対象文字列からマッチする文字烈から、さらにキャプチャを使って抽出
()を正規表現パターンに入れること、その部分をキャプチャすることができる。
var name = 'Hello World';
var re = new RegExp('^(\\w+)\\s(\\w+)$');
var result = re.exec(name);
alert(result[2] + ',' + result[1]);
以下の書式でも可能
var name = 'Hello World';
var re = new RegExp('^(\\w+)\\s(\\w+)$');
var result = re.test(name);
alert(RegExp.$2 + ',' + RegExp.$1);
●正規表現でマッチした文字列を置換
RegExp.execだと手間がかかるが柔軟性は高い。基本はreplaceメソッドを使うほうがラク
var rep = new RegExp('\\d+','g');
var target = 'hello 321456,javascript 5464554 world';
var first = 0;
var result = '';
while((matchArray = rep.exec(target)) != null){
var last = matchArray.index;
result += target.substring(first,last) + '(' + matchArray[0] + ')';
first = rep.lastIndex;
}
result += target.substring(first,target.length);
alert(result);
var rep = new RegExp('\\d+','g');
var target = 'hello 321456,javascript 5464554 world';
var result = target.replace(rep,'($&)');
alert(result);