Заменить («глобальный» флаг включен)
\s(?=[^\]]*(?:\[|$))
с
+
Объяснение
\s # white-space (use an actual space if you want)
(?= # but only when followed by (i.e. look-ahead)...
[^\]]* # ...anything but a "]"
(?: # non-apturing group ("either of")
\[ # "["
| # or
$ # the end of the string
) # end non-capturing group
) # end look-ahead
Это соответствует любому пространству, которое не находится внутри квадратной скобки, при условии, что в строке нет неправильно открытых / закрытых квадратных скобок и что квадратные скобки никогда не вкладываются.