#正規表現で括弧を使うとグループが作られる
以下のような場合、配列 result には2つの値が入ります。
sample.js
var result = 'ABC1000'.match(/^(ABC|XYZ)\d+/)
console.log(result[0]) // 'ABC1000'
console.log(result[1]) // 'ABC'
なぜ result[1] の値が返ってくるのでしょうか。
これは、括弧で囲った (ABC|XYZ)
について、どちらのグループに属しているかを示す役割を果たしてくれているんですね。正規表現では括弧を使うことで特定の部分をグループ化することができます。
※正規表現内 ^(ABC|XYZ)
の部分は「文字列の最初に ABC もしくは XYZ がくる」を意味しています。
#グループ化すれば特定の部分だけを取り出せる
これは正規表現で文字列を検索した後、特定の部分のみを使いたいときに便利です。
例えば、最初の ABC ではなく、最後の数字の部分だけ欲しいのであれば \d+
にも括弧をつけてあげれば取り出せます。
sample.js
var result = 'ABC1000'.match(/^(ABC|XYZ)(\d+)/)
console.log(result[0]) // 'ABC1000'
console.log(result[1]) // 'ABC'
console.log(result[2]) // '1000'
また、どのグループに属するかを示す ABC を使わない場合、?:
を付けてあげれば配列に入ってきません。
sample.js
var result = 'ABC1000'.match(/^(?:ABC|XYZ)(\d+)/)
console.log(result[0]) // 'ABC1000'
console.log(result[1]) // '1000'
以上~