坂本研のゼミ室

正規表現確認ノート (JavaScript)

  • 正規表現は下記のようにスラッシュで囲まれたパターンからなる
let pattern = /正規表現/;

match()

文字列中で一致するものを検索.検索結果の配列を返す.

match()を使った正規表現パターンの記述

let result = 文字列.match(正規表現)
let pattern = /ABC/;
let string = 'abcABC';

let result = string.match(pattern);
console.log(result);
// [ 'ABC', index: 3, input: 'abcABC', groups: undefined ]

文字列中で一致するものがあるか確認.マッチした場所の文字位置(インデックス)を返す.マッチしない場合は-1を返す

search()を使った正規表現パターンの記述

let result = 文字列.search(正規表現)
let pattern = /ABC/;
let string = 'abcABC';

let result = string.search(pattern);
console.log(result);
// 3

正規表現パターン

単純な文字列にマッチするか

/ABC/

単純にABCという文字列にマッチするか

  • マッチする
let pattern = /ABC/;
let string = 'abcABC';
  • マッチしない
let pattern = /ABC/;
let string = 'abc';

どれか1文字マッチするか

[ABC]

ABCのどれか1文字にマッチするか - マッチする

let pattern = /[ABC]/;
let string = 'aAbBcCdD';
  • マッチしない
let pattern = /[ABC]/;
let string = 'abcd';

指定文字以外のどれか1文字にマッチするか

[^ABC]

ABC以外のどれか1文字にマッチするか

  • マッチする
let pattern = /[^ABC]/;
let string = 'AaBbCc';
  • マッチしない
let pattern = /[^ABC]/;
let string = 'DdEeFf';

選択範囲のどれか1文字にマッチするか

[A-C]

AからCまでのどれか1文字にマッチするか

  • マッチする
let pattern = /[A-C]/;
let string = 'abcABC';
  • マッチしない
let pattern = /[A-C]/;
let string = 'abcefg';

エスケープ

\

\の次に書く文字列をエスケープする 例えば,下記のように/(スラッシュ)を見つけたい時などにエスケープする

//エスケープしないとこうなる
let pattern = ///;

//エスケープあり
let pattern = /\//;
let string = 'ABC/abc';

let result = string.search(pattern);
console.log(result);
// 3

文字列の先頭にマッチするか

^A

文字列(行)の先頭にマッチするか

  • マッチする
// Aが先頭にあるかどうか
let pattern = /^A/;
let string = 'ABB';

let result = string.search(pattern);
console.log(result);
// 0
  • マッチしない
// Aが先頭にあるかどうか
let pattern = /^A/;
let string = 'BAB';

let result = string.search(pattern);
console.log(result);
// -1

文字列の末尾にマッチするか

A$

文字列(行)の末尾にマッチするか

下記にマッチする時と,しない時の例を示す

  • マッチする
// Aが末尾にあるかどうか
let pattern = /A$/;
let string = 'BABA';

let result = string.search(pattern);
console.log(result);
// 3
  • マッチしない
// Aが末尾にあるかどうか
let pattern = /A$/;
let string = 'BAB';

let result = string.search(pattern);
console.log(result);
// -1

直前文字列の0回以上の繰り返しにマッチするか

hu*

直前の文字列huの0回以上の繰り返しにマッチするか

  • マッチする
// huが0回以上繰り返されているかどうか
let pattern = /hu*/;
let string = 'hhhhhuuu';

let result = string.search(pattern);
console.log(result);
// 0
// huが0回以上繰り返されているかどうか
let pattern = /hu*/;
let string = 'uuuh';

let result = string.search(pattern);
console.log(result);
// 3
  • マッチしない
// huが0回以上繰り返されているかどうか
let pattern = /hu*/;
let string = 'uuuu';

let result = string.search(pattern);
console.log(result);
// -1

直前の文字列の1回以上の繰り返しにマッチするか

a+

直前の文字列aの1回以上の繰り返しにマッチするか

  • マッチする
// aが1回以上繰り返されているかどうか
let pattern = /a+/;
let string = 'banana';

let result = string.search(pattern);
console.log(result);
// 1
  • マッチしない
// aが1回以上繰り返されているかどうか
let pattern = /a+/;
let string = 'lemon';

let result = string.search(pattern);
console.log(result);
// -1

直前の文字列の0回か1回の出現にマッチするか

a?

直前の文字列aの0回か1回の出現にマッチするか

  • マッチする
// huが0回か1回の出現しているかどうか
let pattern = /hu?/;
let string = 'huuuuu';

let result = string.search(pattern);
console.log(result);
// 0
  • マッチしない
// huが0回か1回の出現しているかどうか
let pattern = /hu?/;
let string = 'nnnnnn';

let result = string.search(pattern);
console.log(result);
// -1

任意の一文字にマッチするか

h.t

h.tの.は任意の一文字にマッチするか

  • マッチする
// h◯tに一致するかどうか
let pattern = /h.t/;
let string = 'hat';

let result = string.search(pattern);
console.log(result);
// 0
  • マッチしない
// h◯tに一致するかどうか
let pattern = /h.t/;
let string = 'heat';

let result = string.search(pattern);
console.log(result);
// -1

直前の文字をn回表示とマッチするか

{n}

直前の文字をn回表示とマッチするか

  • マッチする
// [0-9]{3}は3桁の数字
let pattern = /[0-9]{3}/;
let string = '123';
  • マッチしない
// [0-9]{3}は3桁の数字
let pattern = /[0-9]{3}/;
let string = 'abc';

直前の文字をn回以上表示とマッチするか

{n,}

直前の文字をn回以上表示とマッチするか

  • マッチする
// [0-9]{3,}は3桁以上の数字
let pattern = /[0-9]{3,}/;
let string = '1234';
  • マッチしない
// [0-9]{3,}は3桁以上の数字
let pattern = /[0-9]{3,}/;
let string = '12';

直前の文字をm~n回表示とマッチするか

{m,n}

直前の文字をm~n回表示とマッチするか

  • マッチする
// [0-9]{3~5}は3~5桁の数字
let pattern = /[0-9]{3,5}/;
let string = '1234';
  • マッチしない
// [0-9]{3~5}は3~5桁の数字
let pattern = /[0-9]{3,5}/;
let string = '12abc';

アンダースコアと英数字にマッチするか

\w

アンダースコアと英数字にマッチするか.[A-Za-z0-9_] と同じ

  • マッチする
// アンダースコアと英数字にマッチするか
let pattern = /\w/;
let string = '12a_Abc';
  • マッチしない
// アンダースコアと英数字にマッチするか
let pattern = /\w/;
let string = '$';

文字以外にマッチするか

\W

文字以外にマッチするか.[^\w]と同じ[^A-Za-z0-9_]

  • マッチする
// 文字以外にマッチするか
let pattern = /\W/;
let string = '&%#';
  • マッチしない
let pattern = /\W/;
let string = '12a_Abc';

数字にマッチするか

\d

数字にマッチするか.[0-9] と同じ

  • マッチする
// 数字にマッチするか
let pattern = /\d/;
let string = '3';
// 3桁の数字か
let pattern = /\d{3}/;
let string = '123';
  • マッチしない
// 数字にマッチするか
let pattern = /\d/;
let string = 'abc';

数字以外にマッチするか

\D

数字にマッチするか.[0-9] と同じ

  • マッチする
// 数字以外にマッチするか
let pattern = /\D/;
let string = 'abc';
  • マッチしない
// 数字以外にマッチするか
let pattern = /\D/;
let string = '3';

主なオプションフラグ

  • オプションありの正規表現は下記のようなパターンからなる
let pattern = /正規表現/オプション;

グローバルリサーチ

g

グローバルリサーチ.文字列全体に対してマッチするか (指定なしの場合は1度マッチングした時点で処理を終了).

let pattern = /[A-D]/g;
let string = 'ABCDEFGHI';

大文字と小文字を区別しない

i

大文字と小文字を区別しない (指定なしの場合は区別する).

  • マッチする
let pattern = /[a-d]/i;
let string = 'ABCDEFGHI';
  • マッチしない
let pattern = /[a-d]/;
let string = 'ABCDEFGHI';

Unicode対応

u

Unicode対応 (漢字などを認識してくれるようになる).

  • マッチする
let pattern = /[赤青]色/u;
let string = '赤色';
  • マッチしない
let pattern = /[赤青]色/u;
let string = '黄色';

参考資料

正規表現一覧

正規表現 - JavaScript | MDN

【JavaScript入門】4つのパターンで理解する正規表現の使い方まとめ! | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト

JavaScript 正規表現まとめ - Qiita

【JavaScript】正規表現で文字列を検索する – 株式会社ライトコード

PHP正規表現 - 坂本研のゼミ室

正規表現サンプル集