1. ホーム
  2. regex

[解決済み] 正規表現における角括弧と括弧の違いは何ですか?

2022-03-01 23:42:03

質問

JavaScriptで使用するために作成した正規表現を紹介します。

var reg_num = /^(7|8|9)\d{9}$/

もうひとつ、私のチームメンバーが提案したものを紹介します。

var reg_num = /^[7|8|9][\d]{9}$/

電話番号の検証を行うルールです。

  • 10個の数字だけであること。
  • 最初の数字は7,8,9のどれかであること。

解き方は?

これらの正規表現は(マッチング目的では)等価です。

  • /^(7|8|9)\d{9}$/
  • /^[789]\d{9}$/
  • /^[7-9]\d{9}$/

説明の様子です。

  • (a|b|c) は正規表現 "OR" であり、 "a or b or c" を意味します。 キャプチャ 桁の数字です。厳密には、次のようなコードになります。 (?:7|8|9) にするために をキャプチャするグループです。

  • [abc] は、quot;文字クラス" で、a,b,cのいずれかの文字" を意味します(文字クラスは、例えば、範囲を使用することができます。 [a-d] [abcd] )

これらの正規表現が似ている理由は、文字クラスが "or" の省略形だからです(ただし、単一の文字に対してのみ)。また、alternation では、次のようなこともできます。 (abc|def) これは文字クラスには変換されません。