Javascriptによる正規表現まとめ
Index
JavaScriptで利用できる正規表現についてまとめました。
最後の後読み、否定後読み以外は利用可能かと思います。
- モード修飾子(i,m,g)
- \n,\r,\u2028,\u2029以外の任意の1文字
- 空白文字以外( \S )
- 数字( \d )
- 数字以外( \D )
- 先頭( ^ )
- 末尾( $ )
- 単語区切り( \b )
- 単語区切り以外( \B )
- 0以上の繰り返し( * )
- 1以上の繰り返し( + )
- 0または1回( ? )
- 最短マッチ( .*? )
- nの繰り返し( {n} )
- n以上の繰り返し( {n,} )
- n以上,m以下の繰り返し( {n,m} )
- いずれかの文字( [▲◎■] )
- いずれかのパターン( (▲|◎|■) )
- 後方参照( \n )
- エスケープ( \ )
- 先読み( ?=◎◎◎ )
- 先読み否定( ?!◎◎◎ )
- 後読み( ?<=◎◎◎ )
- 否定後読み( ?<!◎◎◎ )
モード修飾子(i,m,g)
正規表現の末尾にモード修飾子を付与する事で便利なオプションが利用できる。
修飾子 説明 i 大文字、小文字の区別をしない m ^と$を文字列の改行の前後に一致させる g 全ての検索 表記例
//大文字、小文字を区別しない var text = 'JavaScript'; if( /javascript/i.test( text ) ) { alert( 'mode i' ); }
\n,\r,\u2028,\u2029以外の任意の1文字
( . )は任意の文字を示す。修正:2011/3/7
( . )は\n,\r,\u2028,\u2029以外の任意の1文字を示す。// 任意の文字 var text = 'JavaScript'; if( /Java...../.test( text ) ) { alert( '. match' ); }MDN DocCenter( Regex )
https://developer.mozilla.org/ja/JavaScript/Reference/Global_Objects/RegExp
Unicodeの改行
http://www.nilab.info/zurazure2/000739.html
単語の文字( \w )
( \w )は単語の文字を示す。( \w )は( [a-zA-Z0-9_] )と同義。
//単語の文字 var text = 'JavaScript'; if( /Java\w\w\w\w\w/.test( text ) ) { alert( '\\w match' ); }
単語の文字以外( \W )
( \W )は単語の文字以外を示す。
//単語の文字以外 var text = 'JavaScript!!'; if( /JavaScript\W\W/.test( text ) ) { alert( '\\W match' ); }
空白文字( \s )
( \s )は空白文字を示す。( \s )は( [\t\n\r\f] )と同義。
空白文字はタブ、改行、復帰、改ページを含む。//空白文字 var text = 'Love JavaScript'; if( /Love\sJavaScript/.test( text ) ) { alert( '\\s match' ); }スペースが全角の場合は一致しない。
//空白文字 var text = 'Love JavaScript'; if( /Love\sJavaScript/.test( text ) ) { alert( '\\s match' ); }
空白文字以外( \S )
( \S )は空白文字以外を示す。( \S )は( [^\t\n\r\f] )と同義。
//空白文字以外 var text = 'Love JavaScript'; if( /Love\SJavaScript/.test( text ) ) { alert( '\\S match' ); }
数字( \d )
( \d )は数字を示す。( \d )は( [0-9] )と同義。
//数字 var text = 'V8'; if( /\w\d/.test( text ) ) { alert( '\\d match' ); }
数字以外( \D )
( \D )は数字以外を示す。( \D )は( [^0-9] )と同義。
//数字以外 var text = 'JavaScript!'; if( /\D/.test( text ) ) { alert( '\\D match' ); }
先頭( ^ )
( ^ )は文字列の先頭に一致。
//先頭 var text = 'JavaScript'; if( /^J\w+/.test( text ) ) { alert( '^ match' ); }
末尾( $ )
( $ )は文字列の末尾に一致。
//終端 var text = 'JavaScript'; if( /\w+t$/.test( text ) ) { alert( '$ match' ); }先頭、末尾を利用すると空行を検知可能。
//空行 var text = ''; if( /^\s*$/.test( text ) ) { alert( '^\\s*$ match' ); }
単語区切り( \b )
( \b )は単語の境界を示す。
//単語の区切り var text = ' JavaScript '; if( /\b\w+\b/.test( text ) ) { alert( '\\b match' ); }※ \b*や\b+などの繰り返しはエラーになる。
単語区切り以外( \B )
( \B )は単語の境界以外を示す。
//単語の区切り以外 var text = 'JavaScript'; if( /\BScri\B/.test( text ) ) { alert( '\\B match' ); }※ \B*や\B+などの繰り返しはエラーになる。
0以上の繰り返し( * )
( * )は0以上の繰り返しを示す。
//0以上の繰り返し var text = 'JavaScript'; if( /^\w*$/.test( text ) ) { alert( '* match' ); }単語の繰り返しとしても利用可能
//0以上の繰り返し(単語) var text = 'JavaScript JavsScript'; if( /(JavaScript\s*)*/.test( text ) ) { alert( '* match' ); }
1以上の繰り返し( + )
( + )は1以上の繰り返しを示す。
//1回以上の繰り返し var text = 'JavaScript'; if( /Java\w+cript/.test( text ) ) { alert( '+ match' ); }
0または1回( ? )
( ? )は0または1回の繰り返しを示す。
//0回 var text = 'JavaScript'; if( /Java\s?Script/.test( text ) ) { alert( '? match' ); } //1回 var text = 'Java Script'; if( /Java\s?Script/.test( text ) ) { alert( '? match' ); }
最短マッチ( .*? )
( .*? )は最短のマッチを抽出する。
//最短マッチ var text = "<img src='./javascript.png' /><img src='./perl.png' />"; if( /<img.*?src='(.*?)'\s*\/>/.test( text ) ) { alert( '.*? match' ); alert( RegExp.$1 ); // ./JavaScript.pngが出力 }
nの繰り返し( {n} )
( {n} )はn回の繰り返しを示す。
//単語のn回の繰り返し var text = 'JavaScript JavaScript'; if( /(JavaScript\s?){2}/.test( text ) ) { alert( '{n} match' ); }
n以上の繰り返し( {n,} )
( {n,} )はn以上の繰り返しを示す。
//単語のn回以上の繰り返し var text = 'JavaScript JavaScript'; if( /(JavaScript\s?){2,}/.test( text ) ) { alert( '{n,} match' ); }
n以上,m以下の繰り返し( {n,m} )
( {n,m} )はn以上,m以下の繰り返しを示す。
//単語のn回以上,m以下の繰り返し var text = 'JavaScript JavaScript'; if( /(JavaScript\s?){1,2}/.test( text ) ) { alert( '{n,m} match' ); }
いずれかの文字( [▲◎■] )
( [▲◎■] )はいずれかの文字に一致。
//列挙単語のグループ var text = "JavaScript"; if( /[aciJprStv]{10}/.test( text ) ) { alert( '[] match' ); }否定をする事が可能
//列挙単語の否定グループ var text = "JavaScript"; if( /[^aciJprStv]?/.test( text ) ) { alert( '[^] match' ); }
いずれかのパターン( (▲|◎|■) )
( (▲|◎|■) )はいずれかのパターンに一致。
//いずれかのパターン var text = "JavaScript vs Perl"; if( /\w+(\s|\b)?\w+(\s|\b)?\w+/.test( text ) ) { alert( '| match' ); alert( RegExp.$1 ); //後方参照はスペースが出力 }
後方参照( \n )
( \n )は後方参照を示す。
//後方参照 var text = "JavaScript"; if( /^Java(\w+)$/.test( text ) ) { alert( '() match' ); alert( RegExp.$1 ); //Scriptが表示 正規表現としては\1という意味 }後方参照をしない事も可能
//後方参照しない var text = "JavaScript"; if( /^Java(?:\w+)$/.test( text ) ) { alert( '() match' ); alert( RegExp.$1 ); //Scriptが表示されない 後方参照しない }
エスケープ( \ )
( \ )はメタキャラをエスケープさせて通常の文字として認識させる場合。
//メタキャラクタのエスケープ var text = "*JavaScript$"; if( /^\*\w+\$$/.test( text ) ) { alert( '\\ match' ); }
先読み( ?=◎◎◎ )
( ?=◎◎◎ )は後に続くパターン。
//先読み var text = "JavaScript V8"; var data = text.match( /\w+(?=\d{1})/ ); if( data !== null ) { alert( data ); //Vが表示される }
先読み否定( ?!◎◎◎ )
( ?!◎◎◎ )とすると否定先読み可能。
//先読み var text = "JavaScript V8"; var data = text.match( /\w+(?!\d{1})/ ); if( data !== null ) { alert( data ); //JavaScriptが表示される }
後読み( ?<=◎◎◎ )
※後読みはJavaScriptでサポートされていない。
( ?<=◎◎◎ )前に続くパターン//後読み var text = "JavaScript V8"; var data = text.match( /(?<=\w)\d/ ); if( data !== null ) { alert( data ); //Vが表示される }
否定後読み( ?<!◎◎◎ )
※否定後読みはJavaScriptでサポートされていない。
( ?<!◎◎◎ )前に続かないパターン//後読み var text = "JavaScript V8"; var data = text.match( /(?<!\w)\d/ ); if( data !== null ) { alert( data ); //JavaScriptが表示される。 }