"\b" just matches the end of a word character, which is space. But, since you specified only one character match, <space><space>, is interpreted as <space><empty word><space>, and that is why you are getting an empty word as one of the values. Try "\b+" or "\s+" so that it matches all the spaces between the words.
I am not sure what the correct answer is, but using \s will produce the resultand \s+ will produce this result:-Your spaces will be regarded as part of the delimiter, but OP needs the intervening spaces retained as part of the text. The problem is that ! doesn't count as a word character for regexes, so the \b regex will ignore it. That is why you are getting “ !!!” as the last element of the array; \b doesn't distinguish the spaces from the exclamation marks.
I am by no means an expert on regexes, but is it possible to create a straightforward regex to distinguish spaces from ! at all?