JavaScript 正規表現グルーピング

() JavaScript 正規表現グルーピング

JavaScript 正規表現では () でパターンを囲むことで、その部分をグループ化できます。また、グループの値をキャプチャすることもできます。

例えば、次のように「英数字2桁」+「数字4桁以内」を組み合わせたパターンで、それぞれのパターンを () で囲みます。

const r = /^([A-Z0-9]{2})(\d{1,4})$/
const m = r.exec('AB1234')
if (m) {
  for (let i = 0; i < m.length; i++) {
    console.log(`m[${i}]=${m[i]}`)
  }
} else {
  console.log('* not match')
}
// m[0]=AB1234
// m[1]=AB
// m[2]=1234

RegExp の exec() メソッドの戻り値として配列が返ります。配列の要素 0 にはマッチした文字列全体、次の要素に () でキャプチャされた値、 その次の要素にその次の () でキャプチャされた値、というように値がセットされます。

(?:) キャプチャなしのグルーピング

JavaScript 正規表現では (?:) でパターンを囲むことで、値のキャプチャをせずにグループ化できます。

const r = /^(?:[A-Z0-9]{2})(\d{1,4})$/
const m = r.exec('AB1234')
if (m) {
  for (let i = 0; i < m.length; i++) {
    console.log(`m[${i}]=${m[i]}`)
  }
} else {
  console.log('* not match')
}
// m[0]=AB1234
// m[1]=1234

\n n番目のグループの参照

JavaScript の正規表現で \n と書いた箇所は、 「n 番目のグループの値と等しい」という意味になります。

次の例の 1 行目のパターンでは \1 という参照を使っています。 1つ目のグループは、 ([1-6]) の部分です。もしこの部分が 3 という値でマッチしたなら、 \1 の部分は 3 で置き換えられます。

const r = /<h([1-6])>(.+)<\/h\1>/
const m = r.exec('<h3>Hello</h3>')
if (m) {
  for (let i = 0; i < m.length; i++) {
    console.log(`m[${i}]=${m[i]}`)
  }
}
// m[0]=<h3>Hello</h3>
// m[1]=3
// m[2]=Hello

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 JavaScript 入門