JavaScript test 正規表現で真偽値を返す

目次

testメソッド

変数1 = /正規表現のパターン/;
変数 = 変数1.test(文字列);
  • 正規表現のパターンで文字列を検索します。
  • 一致した場合はtrueを返し、一致しなかった場合falseを返します。
  • RegExpオブジェクトのメソッドです。

特定のパターンが存在するか確認するだけであればmatch/execメソッドではなくsearch/testメソッドを使用します。testメソッドは戻り値が真偽値なので実行速度が早くなります。

 

文字列を指定

<script>
    const a = /BC/;

    console.log(a.test("BC")); //true
    console.log(a.test("ABC")); //true
    console.log(a.test("BCD")); //true
    console.log(a.test("B")); //false
    console.log(a.test("BXC")); //false
</script>

文字列「BC」があるときtrueになります。

 

任意の1文字(.)

    const a = /.BC/;

    console.log(a.test("BC")); //false
    console.log(a.test("ABC")); //true
    console.log(a.test("AABC")); //true
    console.log(a.test("BCD")); //false

ピリオド(.)は、任意の1文字を表します。

 

任意の文字が0回以上(.*)

    const a = /A.*C/;

    console.log(a.test("AC")); //true
    console.log(a.test("ABC")); //true
    console.log(a.test("ABBC")); //true
    console.log(a.test("ABD")); //false
    console.log(a.test("XBC")); //false

ドット(.)は任意の文字でアスタリスク(*)は直前の文字が0回以上の繰り返しを表します。

 

任意の文字が1回以上(.+)

    const a = /A.+C/;

    console.log(a.test("AC")); //false
    console.log(a.test("ABC")); //true
    console.log(a.test("ABBC")); //true
    console.log(a.test("ABD")); //false
    console.log(a.test("XBC")); //false

ドット(.)は任意の文字でプラス(+)は直前の文字が1回以上の繰り返しを表します。

 

orを指定([])

    const a = /[AB]/;

    console.log(a.test("AB")); //true
    console.log(a.test("XABC")); //true
    console.log(a.test("AXB")); //true
    console.log(a.test("XA")); //true
    console.log(a.test("AX")); //true
    console.log(a.test("CD")); //false

「A」または「B」を指定しています。

 

否定(^)

    const a = /[^A]/;

    console.log(a.test("A")); //false
    console.log(a.test("BC")); //true
    console.log(a.test("AX")); //true
    console.log(a.test("XA")); //true

「A」以外の文字を指定しています。
先頭の文字列で検索する正規表現と似ていますが、こちらは角かっこ([])があります。

否定(?!)

    const a = /^(?!.*ABC).*$/;

    console.log(a.test("ABC")); //false ABCは含まれる
    console.log(a.test("XABC")); //false ABCは含まれる
    console.log(a.test("ABCX")); //false ABCは含まれる
    console.log(a.test("AXBC")); //true
    console.log(a.test("A")); //true
    console.log(a.test("AB")); //true

指定の文字列(ABC)が含まれていないときにtrueになります。
含まれている場合はfalseになります。

 

文字の範囲(-)

    const a = /[A-C]/;

    console.log(a.test("A")); //true
    console.log(a.test("B")); //true
    console.log(a.test("C")); //true
    console.log(a.test("D")); //false
    console.log(a.test("ABC")); //true
    console.log(a.test("XBX")); //true
    console.log(a.test("XXX")); //false

「A」または「B」または「C」の文字を指定しています。

 

先頭の文字列(^)

    const a = /^AB/;

    console.log(a.test("ABC")); //true
    console.log(a.test("ACB")); //false
    console.log(a.test("XAB")); //false

先頭が「AB」の文字を指定しています。
文字を否定で検索する正規表現と似ていますが、こちらは角かっこ([])がありません。

 

末尾の文字列($)

    const a = /BC$/;

    console.log(a.test("ABC")); //true
    console.log(a.test("BCD")); //false
    console.log(a.test("ACB")); //false

末尾が「BC」の文字を指定しています。

 

連続する文字{数値}

    const a = /b{2}/;

    console.log(a.test("abc")); //false
    console.log(a.test("abbc")); //true
    console.log(a.test("abbbc")); //true

「b」が2回連続する文字を指定しています。

 

1桁以上{1,}

    const ptr = /[0-9]{1,}-/;

    console.log(ptr.test("1-")); // true
    console.log(ptr.test("12-")); // true
    console.log(ptr.test("a1-")); // true
    console.log(ptr.test("1a-")); // false
    console.log(ptr.test("1")); // false
    console.log(ptr.test("-")); // false

数値1桁以上とハイフン(-)を指定しています。

 

数値(0-9)の5桁

    const a = /^[0-9]{5}$/;

    console.log(a.test("12345")); //true
    console.log(a.test("1234")); //false 桁数不足
    console.log(a.test("12a45")); //false 文字あり
    console.log(a.test("a2345")); //false 文字あり
    console.log(a.test("1234a")); //false 文字あり

 

数値(0-9)と英字(a-f)の5桁

    const a = /^[0-9a-f]{5}$/;

    console.log(a.test("12345")); //true
    console.log(a.test("1234")); //false 桁数不足
    console.log(a.test("12a45")); //true 文字あり
    console.log(a.test("12345")); //true 数値のみ
    console.log(a.test("abcde")); //true 英字のみ
    console.log(a.test("12X45")); //false 範囲外の英字

 

郵便番号(数値3桁とハイフンと数値4桁)

    const a = /^\d{3}-\d{4}$/;

    console.log(a.test("123-4567")); //true
    console.log(a.test("1234567")); //false
    console.log(a.test("1234-567")); //false
    console.log(a.test("123-4X67")); //false

\dは、数値を意味します。[0-9]と同じです。

 

ドット(.)を文字として指定(エスケープ)

    const ptr = /a\.txt/;

    console.log(ptr.test("a.txt")); // true
    console.log(ptr.test("ba.txt")); // true
    console.log(ptr.test("ab.txt")); // false
    console.log(ptr.test("atxt")); // false

エスケープを使用してドット(.)を文字として扱います。
エスケープは、バックスラッシュ(ユニコードのU+005C)を指定の文字の前につけます。
環境によっては円マークで表示されます。
ドット(.)にエスケープをつけない場合は任意の一文字という意味になります。

 

正規表現の構文とオプション

正規表現の構文として以下2つがあります。

1.正規表現リテラル

変数 = /正規表現のパターン/オプション

2.RegExpオブジェクトのコンストラクタ

変数 = new RegExp('正規表現のパターン','オプション') 

上記のサンプルコードは全て正規表現リテラルを使用しています。

主なオプション

オプション 説明
g マッチしたものをすべて返す
i 大文字と小文字の区別をしない
m 複数行をマッチする

正規表現のパターン

正規表現の一覧表

関連の記事

JavaScript replace 文字列を置換する(正規表現)
JavaScript search 正規表現でインデックス値を返す

△上に戻る