Regex идет слева направо и не возвращается назад. И как только более ранняя часть выражения 'или' удовлетворена, она не смотрит дальше. Таким образом, вы захватываете более короткую строку, и регулярное выражение никогда не доходит до конца вашего оператора 'или', где находится более длинная строка. Изменение вашего регулярного выражения на
(M|D|MD|A|AM|AD|AMD)?=(D\+A|0|1|-1|D|A|!D|!A|-D|-A)?
поможет. Другими словами, всегда упорядочивайте свои операторы «или» таким образом, чтобы вы сначала захватывали более длинные строки, а затем - более короткие.
демо