質問させてください。

abc  abc%xyz  123  123%xyz
という4つの文字列があるときに、左から順番に、

$1 に 'abc' が代入されるようにマッチする
マッチしない
$1 に '123' が代入されるようにマッチする
$1 に '123'、 $2 に 'xyz' が代入されるようにマッチする

にはどう書けばよいでしょうか?

/^(?:(abc)|(123)(?:%(xyz))?)$/
だと、3つ目と4つ目の '123' が $2 に入る

/^(abc|123)(?:%(xyz))?$/
だと、2つ目がマッチする

/^(abc|123(?:%(xyz))?)$/
だと、4つ目の $1 に文字列すべてが入る

みたいな感じでだめでした。
わかりにくい上に低レベルな質問で
申し訳ないですがよろしくお願いします。