しっかり覚えたい正規表現の基礎

JavaScriptの正規表現を基礎を簡単にまとめました。

正規表現とは

任意の文字とマッチ(照合)させるために、特殊な文字を組み合わせたパターンのことです。

正規表現の使い方

使い方は2通りあります。
どちらでも同じ結果ですが、状況によって使いやすい方を選びましょう。

リテラル記法の場合

「/」で囲むことで正規表現のパターンとして使用できます。

const regexp = /[0-9]/;

コンストラクタ記法の場合

RegExp()の引数に正規表現のパターンを指定すれば使用できます。

const regexp = new RegExp( ‘[0-9]’ );

パターン一覧

正規表現意味
\\次の文字をエスケープ
.A.直前文字の次に改行以外の1文字にマッチ
^^A行の先頭にマッチ
$A$行の末尾にマッチ
*AB*直前文字の0個以上の繰り返しにマッチ(→A、ABB)
+AB+直前文字の1個以上の繰り返しにマッチ(→AB、ABB)
?AB?C直前文字の0個か1個にマッチ(→AC、ABC)
[][ABC]A、B、Cのいずれか1文字にマッチ
[^][^ABC]A、B、C以外のいずれか1文字にマッチ
[a-z][a-z]英字(a~z)の小文字いずれか1文字にマッチ
[A-Z][A-Z]英字(A~Z)の大文字いずれか1文字にマッチ
[0-9][0-9]数字(0~9)の大文字いずれか1文字にマッチ
|AB|GF直前文字または直後文字にマッチ
{n}A{4}直前文字をn回マッチ(→AAAA)
{n,}A{4,}直前文字をn回以上とまっち(→AAAA、AAAAA)
{n,m}A{2,6}直前文字をn〜m回マッチ
\w\w英字(a~z・A~Z)、数字(0~9)、アンダースコア(_)にマッチ
\W\W「\w」以外の文字にマッチ
\b\b単語の区切り、行頭にマッチ
\B\B「\b」以外の文字にマッチ
\s\s半角空白文字にマッチ(改行コードを含む。全角空白は含まない)
\S\S「\s」以外の文字にマッチ
\d\d数字(0~9)にマッチ
\D\D「\d」以外の文字にマッチ
\n\n改行コード
\r\r復帰コード
()(AB)グループ化

エスケープ

「. * + |?」 のような特殊文字は、パターンの中で通常の文字列として扱いたい時は、「 \(バックスラッシュ)」を使用することで無効化する(文字列として扱う)ことができます。

let url1 = 'hoge.jp';
let url2 = 'hoge_jp';

// ★ NG例
let reg1 = new RegExp(/hoge.jp/);
let result1 = reg1.test(url1);
let result2 = reg1.test(url2);

console.log(result1, result2);
// true true

// ★ OK例
let reg2 = new RegExp(/hoge\.jp/);
let result3 = reg2.test(url1);
let result4 = reg2.test(url2);

console.log(result3, result4);
// true false

「 \(バックスラッシュ)」を入れることで「 . 」をエスケープし、 “hoge.jp” だけをマッチできます。

オプションフラグ

正規表現にはオプションフラグというものを付けることができます。正規表現リテラルを使用するときは末尾のスラッシュの後に記述し、RegExpオブジェクトを使用するときは第2引数に指定します。

リテラル記法の場合

「/」で囲んだ末尾に記述します。

const regexp = /[0-9]/g;

コンストラクタ記法の場合

RegExp()の第2引数に記述します。

const regexp = new RegExp( ‘[0-9]’, ‘g’ );

パターン一覧

正規表現意味
ggグローバルサーチ。文字列全てに対してマッチ
ii大文字/小文字を区別しないで検索・置換
mm対象の文字列を複数行として扱う
uuUnicodeに対応(漢字などを認識)

正規表現を使うメソッド

test():マッチした文字列をture/falseで返す

RegExpオブジェクトのメソッドで、マッチした文字列で検索できます。

let str = '000_1234';
let reg = new RegExp(/^\d{3}_\d{4}$/);
let result = reg.test(str);

console.log(result);
// true
返り値

正規パターンにマッチした場合 :trueを返す
正規パターンにマッチしない場合:falseを返す

exec():マッチした文字列を配列で返す

RegExpオブジェクトのメソッドで、マッチした文字列で検索できます。

let str = 'ABCDEFGHIJK';
let reg = new RegExp(/EF/);
let result = reg.exec(str);

console.log(result);
// ["EF"]
返り値

正規パターンにマッチした場合 :文字列を配列で返す
正規パターンにマッチしない場合:nullを返す

match():マッチした文字列を配列で返す

Stringオブジェクトのメソッドで、マッチした文字列を検索できます。

let str = 'ABCDEFGHIJK';
let result = str.match(/C/);

console.log(result);
// ['C']
返り値

正規パターンにマッチした場合 :文字列を配列で返す
正規パターンにマッチしない場合:nullを返す

replace():マッチした文字列を置換して返す

Stringオブジェクトのメソッドで、マッチした文字列を置換できます。

let str = 'ABCDEFGHIJK';
let result = str.replace(/C/);

console.log(result);
// "ABBDEFGHIGK"
返り値

正規パターンにマッチした場合 :文字列を置換して返す
正規パターンにマッチしない場合:そのままの文字列を返す

search():マッチした文字列の位置を返す

Stringオブジェクトのメソッドで、最初にマッチした文字列の位置を確認できます。

let str = 'ABCDEFGHIJK';
let result = str.search(/F/);

console.log(result);
// 5
返り値

正規パターンにマッチした場合 :文字列の位置を返す
正規パターンにマッチしない場合:−1を返す

split():マッチした文字列を配列で返す

Stringオブジェクトのメソッドで、マッチした文字列で分割できます。

let str = 'ABC,DEF,GHI';
let result = str.split(/,/);

console.log(result);
// ["ABC","DEF","GHI"]
返り値

正規パターンにマッチした場合 :文字列を分割した配列で返す
正規パターンにマッチしない場合:文字列を分割せずに配列で返す