js の正規表現で、「完全一致」でマッチする

TOC

  1. どういうことがしたいのか
  2. 完全一致したいとき
  3. メリットは・・?
  4. 「完全一致」の or 検索
  5. その他、いろいろな「特殊文字」が使える
    1. どれか1文字にマッチする
    2. 直前の文字の1回以上の繰り返しにマッチする
  6. 感想

こんにちはー。

機会があって、
正規表現で「完全一致」のテストの方法が知りたくなりました。
今日はその方法を紹介します。

どういうことがしたいのか

1
2
/abcde/.test("abcde"); // true
/abcde/.test("abcdef"); // これも true

このような場合だと、
1行目のようなテストする文字列がパターンと同じ場合、 true になりますが、
含んでいる場合(2行目)も true になってしまいます。
これを、2行目が false になって、1行目だけ true になるようにしたいんです。

完全一致したいとき

https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions

次のようにすればできました!

1
/^パターン$/

^が先頭を表し、$が末尾を表します。
だから、それにパターンを挟む形でやれば「完全一致」でマッチできます。

例:

1
2
3
/^下$/.test("下"); // true
/^下$/.test("下町"); // false
/^下$/.test("上下"); // false

メリットは・・?

なら、「if ("下" === "下") {}」でよくない?
と思うかもしれません。
たしかに上の例ではそうですが、
正規表現で比較すると、様々なメリットを得ることもできます。

「完全一致」の or 検索

例えば、次のように書いたとしましょう。

1
var reg = /^(下|上)$/;

こうすれば、or でのテストもできますよ~

使用例:

1
2
3
4
/^(下|上)$/.test("下"); // true
/^(下|上)$/.test("上"); // true
/^(下|上)$/.test("上下"); // false
/^(下|上)$/.test("上野"); // false

その他、いろいろな「特殊文字」が使える

完全一致と言っていいのかわかりませんが、
? や、. などの特殊文字も使えます。

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

. を使います。

1
2
/^A.C$/.test("ABC"); // true
/^A.C$/.test("AC"); // false

※ 改行文字にはマッチしません。
  改行文字にマッチするには、\n や、\s(スペースなども含む)を使用します。

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

+ を使います。

1
2
3
/^AA+B$/.test("AAB"); //true
/^AA+B$/.test("AAAAAAAAAAAAAAAAB"); // true
/^AA+B$/.test("AB"); //false

※繰り返さない場合(0回以上の繰り返し)にもマッチするときは、* を使います。

その他の特殊文字の意味と使い方は、MDN の記事をご覧ください。

感想

学んでいて、
正規表現の実用性の高さに感動しました。