節約テクノロジ >

Javascript正規表現クックシート(よく使うサンプル集)2014/11/13更新


正規表現は文字列置換や検索をする際のパターンを非常に柔軟かつ簡潔に記述することができる方法です。 Javascriptにおいても拡張された正規表現が標準実装されており、簡単に利用する事ができます。

ここではよく使う表現を厳選し目的別に実例を記述していきます。

目次

  1. 基本的な検索をする
  2. 任意の文字(ワイルドカード)を使って検索する
  3. 文字の繰り返しを含めて検索する
  4. 行頭と行末を指定する
  5. マッチした部分を再利用して置換する
  6. グルーブ表現を使いマッチさせる
  7. 修飾子
  8. 文字列を含まない場合にマッチ
  9. 特定の文字列が続かない場合にのみマッチ
  10. 特定の文字列が続く場合にのみマッチ
  11. 文字列と完全一致しない場合にマッチ
  12. 詳しい解説(外部リンク)
  13. コメント

基本的な検索をする

var s="abcdef"
s.match(/abc/) //!=null(マッチ)
s.match(/acb/) //==null

基本的な検索です。Javascriptではマッチしない場合はNULL,マッチした場合は下記の様なオブジェクトが返されます。

[ 'abc',
  index: 0,
  input: 'abcdef' ]

任意の文字(ワイルドカード)を使って検索する

var s="abcd8"
s.match(/a.c/)       //!=null
s.match(/a..d/)      //!=null
s.match(/a[bcd]c/)   //!=null
s.match(/a[b-d]c/)   //!=null
s.match(/abcd[0-9]/) //!=null
s.match(/a[^c]c/)    //!=null
s.match(/a[^b]c/)    //==null
s.match(/a[^bc]c/)   //==null

「.」は任意の文字にマッチします。「[]」は囲まれた文字群のいずれかにマッチします。文字群は「-」で範囲を指定することも可能です。「[^]」は反対に囲まれた文字群以外にマッチします。

下記の様な表現も可能です。「\s」「\w」「\d」はそれぞれスペース、数値を含む文字、数字を表します。大文字はその否定版です。

var s=" a8"
s.match(/\s\w\d/)  //!=null
s.match(/\S\W\D/)  //==null

文字の繰り返しを含めて検索する

var s="aaab8"
s.match(/a+8/)       //!=null
s.match(/a+b+c*8/    //!=null
s.match(/a+b+c+8/)   //==null
s.match(/.*8/)       //!=null
s.match(/a{3}b/      //!=null
s.match(/a{1,10}b/   //!=null
s.match(/a{1,2}b/    //==null

「+」は前の文字(または後述のブロック)の1回以上の繰り返し、「*」は0回以上(無くてもいい)の繰り返しです。「{}」は繰り返し回数の範囲を指定した表現です。

行頭と行末を指定する

var s="abc"
s.match(/^ab/)       //!=null
s.match(/^bc/)       //==null
s.match(/bc$/)       //!=null
s.match(/ab$/)       //==null

「^」と「$」は行頭と行末を表します。Javascriptの場合は改行ではなく文字列自体の末を表しますので注意してください。

マッチした部分を再利用して置換する

var s="abcdef"
s.replace(/abc/,"---")           //=="---def"
s.replace(/(...)def/,"$1---")    //=="abc---"
s.replace(/(..)cd(..)/,"$1--$2") //=="ab--ef"

var s="abc:def:"
s.replace(/^(.*):.*/,"$1")    //=="abc:def"
s.replace(/^(.*?):.*/,"$1")   //=="abc"

置換は上記の様に行います。括弧で囲まれた部分にマッチした文字列は「$1」のように置換する文字列で再利用できます。 また、繰り返し表現の+や*に?をつけることで最短の範囲でマッチします。デフォルトは最長になってしまいます(上記例参照)

var s='abcdef'
var m=s.match(/(...)(...)/)

m==
[ 'abcdef',
  'abc',
  'def',
  index: 0,
  input: 'abcdef' ]   

マッチしたオブジェクトは上記のような構造をしています。m[1]などの形で後から参照することもできます。

グルーブ表現を使いマッチさせる

var s="ababcd"
s.replace(/(ab)+/,"--")      //----cd
s.replace(/(ab|cd)+/,"--")   //------

前述の繰り返しの例は1文字に対してでしたが、括弧を使う事でグループに対する繰り返しを表現できます。「|」はいずれかという表現です。

修飾子

var s="ababAB"
s.replace(/ab/,"--") //--abAB
s.replace(/ab/g,"--") //----AB
s.replace(/ab/gi,"--") //------

正規表現の後にgまたはiの文字をつける事で、それぞれ「置換の繰り返し」「大文字小文字の無視」の指定ができます。

文字列を含まない場合にマッチ

var s="aaaABCbbb"
s.match(/^(?!.*ABC).*$/)  //=null

(?!....)は括弧内の文字列が続かない場合にマッチします。(?!.*ABC)ですべてのABCが続かない文字列という意味になります。

特定の文字列が続かない場合にのみマッチ

var s="aaaABCaaaDEF"
s.replace(/aaa(?!ABC)/g,'---')  //aaaABC---DEF

特定の文字列が続く場合にのみマッチ

var s="aaaABCaaaDEF"
s.replace(/aaa(?=ABC)/g,'---')  //---ABCaaaDEF

文字列と完全一致しない場合にマッチ

var s="aaaABCbbb"
s.match(/^(?!ABC$)/)  //!=null
s.match(/^(?!aaaABCbbb$)/)  //=null
s.match(/^(?!aaaABCbbbC$)/)  //!=null

(?!....)は括弧内の文字列が続かない場合にマッチします。(?!.*ABC)ですべてのABCが続かない文字列という意味になります。

詳しい解説(外部リンク)

この記事の例はよく使う表現のみ集めました。正規表現はこの他にも様々な表現ができます。 下記からたどってみてください。特にSimplyTermsは翻訳ソフトのヘルプですが非常にわかりやすく書かれていてオススメです。

この記事を見た人がよく読んでいる記事

節約テクノロジ >

コメント

トップページ

節約テクノロジ > Javascript正規表現クックシート(よく使うサンプル集)2014/11/13更新