»» /^([ab]c?)+$/
die Begrenzer (^ und $) brauchst Du, damit nicht z.B. 'zab' erkennst, wenn allerding vorher schon feststeht, daß es nur die gegebenen drei Zeichen im String gibt, dann kannst Du das auch weglassen.
Nein, /[ab]c?/ matched auf 'qqw12321ccyä#33‚cccccabccccc'.