const result = /a(b)?/.exec('a'); const { length } = result; // 2 const [matched, capture1] = result; // "a", undefined groupsは名前付きキャプチャを使わなければundefinedなのでいいとして、result[1]がundefinedですね。 ただ、このぐらい単純な場合、書き方を変えればそれを回避できます。 const result = /a(b?)/.exec('a'); const { length } = result; // 2 const [matched, capture1] = result; // "a", "" この挙動の違いは0文字をキャプチャしたグループとそもそも適用されなかったグループの違いです。 ?や*、|によってスキップされてしまったグル