Why do you need to do this in one monster-regex? You can use actual code to implement some of these rules, and doing so would be much easier to modify if those requirements change later.
For example:
if(/^[A-Z0-9\s]*$/)
# sentence is all uppercase, so just fail out
return 0;
# Carry on with matching uppercase terms