127

So i'm writing a tiny little plugin for JQuery to remove spaces from a string. see here

(function($) {
    $.stripSpaces = function(str) {
        var reg = new RegExp("[ ]+","g");
        return str.replace(reg,"");
    }
})(jQuery);

my regular expression is currently [ ]+ to collect all spaces. This works.. however It doesn't leave a good taste in my mouth.. I also tried [\s]+ and [\W]+ but neither worked..

There has to be a better (more concise) way of searching for only spaces.

7 Answers 7

307

I would recommend you use the literal notation, and the \s character class:

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

There's a difference between using the character class \s and just ' ', this will match a lot more white-space characters, for example '\t\r\n' etc.., looking for ' ' will replace only the ASCII 32 blank space.

The RegExp constructor is useful when you want to build a dynamic pattern, in this case you don't need it.

Moreover, as you said, "[\s]+" didn't work with the RegExp constructor, that's because you are passing a string, and you should "double escape" the back-slashes, otherwise they will be interpreted as character escapes inside the string (e.g.: "\s" === "s" (unknown escape)).

Sign up to request clarification or add additional context in comments.

1 Comment

I read somewhere that \s+ is faster, as it matches longer, thus might reduce the number of internal replace.
16
"foo is bar".replace(/ /g, '')

Comments

5

In production and works across line breaks

This is used in several apps to clean user-generated content removing extra spacing/returns etc but retains the meaning of spaces.

text.replace(/[\n\r\s\t]+/g, ' ')

Comments

2

This works just as well: http://jsfiddle.net/maniator/ge59E/3/

var reg = new RegExp(" ","g"); //<< just look for a space.

Comments

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

Works for me.

jQuery.trim has the following hack for IE, although I'm not sure what versions it affects:

// Check if a string has a non-whitespace character in it
rnotwhite = /\S/

// IE doesn't match non-breaking spaces with \s
if ( rnotwhite.test( "\xA0" ) ) {
    trimLeft = /^[\s\xA0]+/;
    trimRight = /[\s\xA0]+$/;
}

Comments

2

Remove all spaces in string

// Remove only spaces
`
Text with spaces 1 1     1     1 
and some
breaklines

`.replace(/ /g,'');
"
Textwithspaces1111
andsome
breaklines

"

// Remove spaces and breaklines
`
Text with spaces 1 1     1     1
and some
breaklines

`.replace(/\s/g,'');
"Textwithspaces1111andsomebreaklines"

Comments

1

Both of them should work:

text.replace(/ +/g,' ')

Or:

text.replace(/ {2,}/g, ' ')

const text = "eat healthy     and  drink  gallon of  water."


text.replace(/ +/g,' ')
// eat healthy and drink gallon of water.

text.replace(/ {2,}/g, ' ')
// eat healthy and drink gallon of water.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.