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