忍者ブログ

18Jan

[PR]

Posted by in

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

20May

正規表現

Posted by No Name Ninja in 正規表現

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);


PR

Comment


Vodafone絵文字 i-mode絵文字 Ezweb絵文字