js の正規表現で、「完全一致」でマッチする
TOC
こんにちはー。
機会があって、
正規表現で「完全一致」のテストの方法が知りたくなりました。
今日はその方法を紹介します。
どういうことがしたいのか
1 | /abcde/.test("abcde"); // 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 の記事をご覧ください。
感想
学んでいて、
正規表現の実用性の高さに感動しました。