> Maybe it's not much extra workload, but ()$ requires you to pattern-match all bracketed content in a string as a possible capture, and the parser can't determine whether it's a capture or not until the $ or a matching close bracket.
You don't have to: you can also just parse the string backwards.
You don't have to: you can also just parse the string backwards.