The (.*) is greedy. Once it captures the entire string it lets the alternation in the parens take over, which backtracks to see if it can find a match, and it can: the '...' is the first match it comes across by moving backwards.
You can use (.*?) to make the expression ungreedy and it will match what you want.
P.S. If you don't need the trailing part, use (?:) instead of ().