Regex for matching a music Chord

Change [ and ] to ( and ) in the following lines:

String accidentals = "(#|##|b|bb)";
String chords = "(maj7|maj|min7|min|sus2)";

Otherwise you're just making character classes, so [maj7|maj|min7|min|sus2] simply matches on the letter m.

I'm guessing you also want to add an ending anchor $? I see you had problems with that before, but that's probably because of the aforementioned issue.


Also, might you want (#|##|b|bb) to be optional (i.e., with ?: (#|##|b|bb)?)?


Forgive the JavaScript, but on a purely REGEX point, this pattern seems to work. You didn't stipulate which numbers are allowed after which chord names but I've assumed 2 is allowed only after 'sus' and 7 only after 'min' and 'maj'.

var chords = "C#maj7 C##maj Bbmaj7 Abmin2 Cbmin Dsus";
var valid_chords = chords.match(/\b[CDEFGAB](?:#{1,2}|b{1,2})?(?:maj7?|min7?|sus2?)\b/g);