[javascript] Is there a difference between /\s/g and /\s+/g?

When we have a string that contains space characters:

var str = '  A B  C   D EF ';

and we want to remove the spaces from the string (we want this: 'ABCDEF').

Both this:

str.replace(/\s/g, '')

and this:

str.replace(/\s+/g, '')

will return the correct result.

Does this mean that the + is superfluous in this situation? Is there a difference between those two regular expressions in this situation (as in, could they in any way produce different results)?


Update: Performance comparison - /\s+/g is faster. See here: http://jsperf.com/s-vs-s

This question is related to javascript regex

The answer is


+ means "one or more characters" and without the plus it means "one character." In your case both result in the same output.


\s means "one space", and \s+ means "one or more spaces".

But, because you're using the /g flag (replace all occurrences) and replacing with the empty string, your two expressions have the same effect.


In a match situation the first would return one match per whitespace, when the second would return a match for each group of whitespaces.

The result is the same because you're replacing it with an empty string. If you replace it with 'x' for instance, the results would differ.

str.replace(/\s/g, '') will return 'xxAxBxxCxxxDxEF '

while str.replace(/\s+/g, '') will return 'xAxBxCxDxEF '

because \s matches each whitespace, replacing each one with 'x', and \s+ matches groups of whitespaces, replacing multiple sequential whitespaces with a single 'x'.