LoginSignup
16
22

More than 1 year has passed since last update.

【JavaScript】正規表現まとめ

Posted at

正規表現とは

正規表現とは、ある文字列の中に存在する、パターンを表現するものです。
例えば郵便番号を表現するパターンは「0から9の数字のいずれかを、7回繰り返す」となります。
このようなパターン(正規表現)は後述する、「特殊文字」を組み合わせて記述できます。
正規表現は主に、文字列の検索や置き換えなどに使えます。

定義方法

JavaScriptで正規表現を定義する方法は2つあります。

正規表現リテラル

// /パターン/オプションフラグ(後述)
const re = /abc/i;

正規表現リテラルはスクリプトが読み込まれたタイミングで、コンパイルされます。
そのため正規表現のパターンが変わらない場合は、こちらの定義方法のほうがパフォーマンスが良いです。

RegExpコンストラクター

// new RegExp('パターン', 'オプションフラグ(後述)')
const re = new RegExp('abc', 'i');

こちらは関数実行時にコンパイルされます。
そのため正規表現のパターン内にユーザーの入力値を使いたい、などパターンが変わる場合はこちらの定義方法を使います。

特殊文字

正規表現は特殊文字を組み合わせて記述します。

文字 説明
^ 行の先頭にマッチする
$ 行の末尾にマッチする
* 直前の文字の0回以上の繰り返しにマッチする
+ 直前の文字の1回以上の繰り返しにマッチする
? 直前の文字の0回か1回の繰り返しにマッチする
{n} 直前の文字のn回の繰り返しにマッチする
{n,} 直前の文字のn回以上の繰り返しにマッチする
{n,m} 直前の文字のn~m回の繰り返しにマッチする
. 改行文字以外の文字と一致
\ エスケープ文字
[abc] 角括弧で囲まれた文字のいずれか一個にマッチする
[a-z] 指定した範囲の文字にマッチする
[^abc] 角括弧で囲まれた文字以外の文字にマッチする
\s 空白にマッチする
\w 英字、数字、アンダースコアにマッチする
\W \w でマッチしない文字とマッチする
\d 数字とマッチする
\D 数字以外とマッチする
\n 改行とマッチする
\r 復帰 とマッチする

例えば郵便番号の正規表現は以下のように表すことができます。

// 先頭から末尾の間に、0から9の数字のいずれかを、7回繰り返す
const postCode = /^[0-9]{7}$/

オプションフラグ

正規表現には、オプションフラグがあります。
これらは1つでも複数でも使用でき、順序は問いません。
オプションフラグにより、グローバル検索、大文字小文字を問わない検索、などを実現できます。

オプションフラグ 説明
d 一致した部分文字列の位置を生成する
g グローバル検索を行う
i 大文字・小文字を区別しない検索を行う
m 複数行の検索を行う
s .が改行文字に一致するようにする
u unicode対応
y 対象文字列の現在の位置から始まる部分に一致するものを探す「先頭固定」検索を行う

正規表現を使用するメソッド

JavaScriptでは正規表現を、RegExpオブジェクトのtest()とexec()、Stringオブジェクトのmatch()、replace()、search()、split()とともに使用できます。

test()

正規表現にマッチする文字列があるかを判定し、true/falseを返します。

const str = "ABCDEFG";

const re = /[a-c]/i;

const resultTest = re.test(str);

console.log(resultTest);  // true

exec()

正規表現にマッチする文字列があるかを検索し、結果を配列で返します。

const str = "ABCDEFG";

const re = /[a-c]/i;

const resultExec = re.exec(str);

console.log(resultExec);  // ['A', index: 0, input: 'ABCDEFG', groups: undefined]

match()

正規表現にマッチする文字列があるかを検索し、結果を配列で返します。
RegExpオブジェクトのexec()と基本的に同じですが、gオプションをつけた場合の結果が異なります。
gオプションをつけた場合、マッチする文字列の配列を返します。

const str = "ABCDEFG";

const re = /[a-c]/ig;

const resultMatch = str.match(re);

console.log(resultMatch);  // ['A', 'B', 'C']

replace()

正規表現にマッチする文字列を、他の文字列と置き換えることができます。

const str = "ABCDEFG";

const re = /a/i;

const resultReplace = str.replace(re, 'Z');

console.log(resultReplace);  // ZBCDEFG

search()

正規表現にマッチする文字列があるかを検索し、一致した位置を返します。

const str = "BCDEFGA";

const re = /a/i;

const resultSearch = str.search(re);

console.log(resultSearch);  // 6

split()

正規表現にマッチする文字列を区切りとして、文字列を分割することができます。

const str = "2022/10/25";

const re = /\//;

const resultSplit = str.split(re);

console.log(resultSplit);  // ['2022', '10', '25']

参考

採用のお知らせ

株式会社Relicでは、フロントエンドエンジニアを積極的に採用中です。
またRelicでは、地方拠点がありますので、U・Iターンも大歓迎です!🙌
少しでもご興味がある方は、Relic採用サイトからエントリーください!

16
22
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
22