Since you seem to be interested in performance, I profiled these with firebug. Here are the results I got:
str.replace( / +/g, ' ' ) -> 790ms380ms str.replace( / +\s\s+/g, ' ' ) -> 380ms390ms str.replace( / {2,}/g, ' ' ) -> 470ms str.replace( /\s\s+ +/g, ' ' ) -> 390ms790ms str.replace( / +(?= )/g, ' ') -> 3250ms This is on Firefox, running 100k string replacements.
I encourage you to do your own profiling tests with firebug, if you think performance is an issue. Humans are notoriously bad at predicting where the bottlenecks in their programs lie.
(Also, note that IE 8's developer toolbar also has a profiler built in -- it might be worth checking what the performance is like in IE.)