コーディング時の文字列の置換や、JavaScriptでのフォームの簡易的なバリデーションなどで使う機会があるのでまとめてみました。
JavaScriptでの正規表現(match)
//正規表現のパターンを作る
const pattern = /正規表現/オプション;
//検索対象の文字列を作る
const str = "検索対象の文字列";
//検索する
const result = str.match(pattern);
//マッチした文字列を表示(マッチしないとnullを表示)
console.log(result);
郵便番号をマッチさせてみる
const pattern = /^[0-9]{3}-?[0-9]{4}$/;
const string ="123-4567";
const result = string.match(pattern);
console.log(result);
「^[0-9]{3}-?[0-9]{4}$」を分解して見ていきます。
- 「^」は先頭
- 「[0-9]」は0~9のうち1文字
- 「{3}」は直前の指定を3回繰り返す
- 「-?」は「-」を0回か1回
- 「{4}」は直前の指定を4回繰り返す
- 「$」は末尾
「^[0-9]{3}」の部分で、前半の数字3桁を表しています。
「-?」はハイフンの部分ですが、省略される事も想定して0回か1回としています。
「[0-9]{4}」後半の数字4桁を表しています。
記法まとめ
オプション(フラグ)
表記 |
意味 |
g |
文字列全体に対して検索(無指定だと最初のマッチングで終了) |
i |
大文字/小文字を区別しない(無指定の場合は区別する) |
m |
複数行の文字列を扱う(^と$が各行の先頭と末尾にマッチする) |
メタ文字
表記 |
意味 |
^ |
~で始まる文字列 |
$ |
~で終わる文字列 |
. |
任意の1文字 |
文字クラス
表記 |
意味 |
[012] |
0,1,2のどれか1つ |
[0-9] |
0~9のどれか1つ |
[A-Z] |
A~Zのどれか1つ |
[A-Za-z] |
A~Zとa~zのどれか1つ |
[^012] |
012以外で1文字 |
[01][01] |
00,01,10,11のどれか1つ |
略記法
表記 |
意味 |
\s |
空白 |
\S |
空白ではない |
\d |
数字 [0-9]と同じ |
\D |
数字ではない [^0-9]と同じ |
\w |
[A-Za-z_0-9]と同じ |
\W |
[^A-Za-z_0-9]と同じ |
出現回数
表記 |
意味 |
* |
0回以上 |
+ |
1回以上 |
? |
0か1回 |
{n} |
n回 |
{n,} |
n回以上 |
{n,m} |
n~m回 |
グループ化
エスケープ
表記 |
意味 |
\++ |
+の1回以上の繰り返し |
\. |
.を表す |
/ |
/を表す |
まとめ
メールアドレスの正規表現でのバリデーションは事故の元。
先人が考えたものをありがたく使わせていただきましょう。
おまけ match以外のメソッド
何を返すか
メソッド |
返ってくるもの |
match() |
マッチパターンが配列で返される |
search() |
マッチパターンの先頭位置が返される(0番目から) |
test() |
マッチパターンがある場合はtrue、ない場合はfalseが返される |
exec() |
マッチパターンが1つ返される |
使い分け
用途 |
メソッド |
マッチパターンを全て抜き出したい場合 |
match |
繰り返し操作で順にマッチパターンが欲しい場合 |
exec |
マッチパターンがあるかどうかだけを知りたい場合 |
test |
先頭のマッチパターンだけが欲しい場合 |
search、パターンにgを付けないmatch |
文法
js
//match()
対象文字列.match(正規表現)
//search()
対象文字列.search(正規表現)
//test()
対象正規表現.test(文字列)
//exec()
対象正規表現.exec(文字列)