忍者ブログ

18Apr

[PR]

Posted by in

×

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

PAGE TOP△

29May

正規表現の特殊文字、フラグ、特殊パターン

Posted by No Name Ninja in 正規表現

正規表現の特殊文字
^ 先頭からマッチ
$ 末尾からマッチ
* 0回以上マッチ
+ 1回以上マッチ
? 0回または1回マッチ
{n} n回マッチ
{n,m} n回以上m回以下マッチ
. 改行を除くすべての文字
[] 候補文字
[^] 候補以外の文字
\b \wと\Wで表現される文字の境界
\B \Bの逆
\d 0~9jの文字
\D 0~9j以外の文字
\w 英数字とアンダースコア(_)文字
\W 英数字とアンダースコア(_)以外の文字
\n 改行文字
\s スペース文字



正規表現フラグ
g グローバルマッチ。マッチする箇所が複数ある場合、指定する。
i 大文字、小文字を区別しない場合指定する。
m 文字列に改行がある場合、各行で先頭(^)と末尾($)を有効化



replaceメソッドの特殊パターン
$$ '$'を表す
$& マッチした文字列
$` マッチした文字列の前の文字列
$' マッチした文字列の後ろの文字列
$n n番目にキャプチャした文字列
PR

Comment (0) | PAGE TOP△

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


Comment (0) | PAGE TOP△