Reputation: 44285
How can I remove all extra space between words in a string literal?
"some value"
Should become
"some value"
Also,
" This should become something else too . "
Becomes
"This should become something else too ."
Do not worry about moving the .
. Just as above is fine. I know I can use $.trim(str)
to achieve the trailing/ending space removal. But, I'm not sure how to do the 1 space between words trick.
Upvotes: 63
Views: 82559
Reputation: 4247
For my case, I had to combine other answers and add the /m modifier for a multiline string, resulting in:
string.replace(/^[ \s\t]*| +(?= )/gm, '')
let string = `
I want
all the extra
spaces removed.
^
`;
console.log(string.replace(/^[ \s\t]*| +(?= )/gm, ''))
Upvotes: 0
Reputation: 4125
In case we want to avoid the replace function with regex,
We can achieve same result by
str.split(' ').filter(s => s).join(' ')
// var str = " This should become something else too . ";
// result is "This should become something else too ."
First, split the original string with space, then we will have empty string and words in an array. Second, filter to remain only words, then join all words with a whitespace.
Upvotes: 12
Reputation: 9664
var str = " This should become something else too . "
$.trim(str).replace(/\s(?=\s)/g,'')
This uses lookahead to replace multiple spaces with a single space.
Upvotes: 4
Reputation: 349222
var string = " This should become something else too . ";
string = string.replace(/\s+/g, " ");
This code replaces a consecutive set of whitespace characters (\s+
) by a single white space. Note that a white-space character also includes tab and newlines. Replace \s
by a space if you only want to replace spaces.
If you also want to remove the whitespace at the beginning and end, include:
string = string.replace(/^\s+|\s+$/g, "");
This line removes all white-space characters at the beginning (^
) and end ($
). The g
at the end of the RegExp means: global, ie match and replace all occurences.
Upvotes: 116
Reputation: 4984
" This should become something else too . ".replace(/[\s\t]+/g,' ');
Upvotes: 3
Reputation: 359986
Another (perhaps easier to understand) regexp replacement that will do the trick:
var input = /* whatever */;
input = input.replace(/ +/g, ' ');
The regexp matches one or more spaces, so the .replace()
call replaces every single or repeated space with a single space.
Upvotes: 2
Reputation: 61872
var str = " This should become something else too . ";
str = str.replace(/ +(?= )/g,'');
Here's a working fiddle.
Upvotes: 22