Y's note

Web技術・プロダクトマネジメント・そして経営について

本ブログの更新を停止しており、今後は下記Noteに記載していきます。
https://note.com/yutakikuchi/

Javascriptによる正規表現まとめ

Index

JavaScriptで利用できる正規表現についてまとめました。
最後の後読み、否定後読み以外は利用可能かと思います。

  1. モード修飾子(i,m,g)
  2. \n,\r,\u2028,\u2029以外の任意の1文字
  3. 空白文字以外( \S )
  4. 数字( \d )
  5. 数字以外( \D )
  6. 先頭( ^ )
  7. 末尾( $ )
  8. 単語区切り( \b )
  9. 単語区切り以外( \B )
  10. 0以上の繰り返し( * )
  11. 1以上の繰り返し( + )
  12. 0または1回( ? )
  13. 最短マッチ( .*? )
  14. nの繰り返し( {n} )
  15. n以上の繰り返し( {n,} )
  16. n以上,m以下の繰り返し( {n,m} )
  17. いずれかの文字( [▲◎■] )
  18. いずれかのパターン( (▲|◎|■) )
  19. 後方参照( \n )
  20. エスケープ( \ )
  21. 先読み( ?=◎◎◎ )
  22. 先読み否定( ?!◎◎◎ )
  23. 後読み( ?<=◎◎◎ )
  24. 否定後読み( ?<!◎◎◎ )

モード修飾子(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が表示される。
}