Because when the negative lookahead fails the quantifiers (and anything else that can) will backtrack, till it finds a match.
You can force an expression not to backtrack by using atomic groups (?>expression)
:
(?<URL>(?>(?<Protocol>\w+):\/\/(?<Domain>[\w@][\w.:@]+)\/?[\w\.?=%&=\-@/$,]*))(?!'|"|(</a))