Regex to replace multiple spaces with a single space

JavascriptJqueryRegex

Javascript Problem Overview


Given a string like:

"The dog      has a long   tail, and it     is RED!"

What kind of jQuery or JavaScript magic can be used to keep spaces to only one space max?

Goal:

"The dog has a long tail, and it is RED!"

Javascript Solutions


Solution 1 - Javascript

Given that you also want to cover tabs, newlines, etc, just replace \s\s+ with ' ':

string = string.replace(/\s\s+/g, ' ');

If you really want to cover only spaces (and thus not tabs, newlines, etc), do so:

string = string.replace(/  +/g, ' ');

Solution 2 - Javascript

Since you seem to be interested in performance, I profiled these with firebug. Here are the results I got:

str.replace( /  +/g, ' ' )       ->  380ms
str.replace( /\s\s+/g, ' ' )     ->  390ms
str.replace( / {2,}/g, ' ' )     ->  470ms
str.replace( / +/g, ' ' )        ->  790ms
str.replace( / +(?= )/g, ' ')    -> 3250ms

This is on Firefox, running 100k string replacements.

I encourage you to do your own profiling tests with firebug, if you think performance is an issue. Humans are notoriously bad at predicting where the bottlenecks in their programs lie.

(Also, note that IE 8's developer toolbar also has a profiler built in -- it might be worth checking what the performance is like in IE.)

Solution 3 - Javascript

var str = "The      dog        has a long tail,      and it is RED!";
str = str.replace(/ {2,}/g,' ');

EDIT: If you wish to replace all kind of whitespace characters the most efficient way would be like that:

str = str.replace(/\s{2,}/g,' ');

Solution 4 - Javascript

A more robust method: This takes care of also removing the initial and trailing spaces, if they exist. Eg:

// NOTE the possible initial and trailing spaces
var str = "  The dog      has a long   tail, and it     is RED!  "

str = str.replace(/^\s+|\s+$|\s+(?=\s)/g, "");

// str -> "The dog has a long tail, and it is RED !"

Your example didn't have those spaces but they are a very common scenario too, and the accepted answer was only trimming those into single spaces, like: " The ... RED! ", which is not what you will typically need.

Solution 5 - Javascript

This is one solution, though it will target all space characters:

"The      dog        has a long tail,      and it is RED!".replace(/\s\s+/g, ' ')

"The dog has a long tail, and it is RED!"

Edit: This is probably better since it targets a space followed by 1 or more spaces:

"The      dog        has a long tail,      and it is RED!".replace(/  +/g, ' ')

"The dog has a long tail, and it is RED!"

Alternative method:

"The      dog        has a long tail,      and it is RED!".replace(/ {2,}/g, ' ')
"The dog has a long tail, and it is RED!"

I didn't use /\s+/ by itself since that replaces spaces that span 1 character multiple times and might be less efficient since it targets more than necessary.

I didn't deeply test any of these so lmk if there are bugs.

Also, if you're going to do string replacement remember to re-assign the variable/property to its own replacement, eg:

var string = 'foo'
string = string.replace('foo', '')

Using jQuery.prototype.text:

var el = $('span:eq(0)');
el.text( el.text().replace(/\d+/, '') )

Solution 6 - Javascript

I have this method, I call it the Derp method for lack of a better name.

while (str.indexOf("  ") !== -1) {
    str = str.replace(/  /g, " ");
}

[Running it in JSPerf gives some surprising results.][1] [1]: http://jsperf.com/removing-multiple-spaces/3

Solution 7 - Javascript

More robust:

function trim(word)
{
word = word.replace(/[^\x21-\x7E]+/g, ' ');	// change non-printing chars to spaces
return word.replace(/^\s+|\s+$/g, '');		// remove leading/trailing spaces
}

Solution 8 - Javascript

Here is an alternate solution if you do not want to use replace (replace spaces in a string without using replace javascript)

var str="The dog      has a long   tail, and it     is RED!";
var rule=/\s{1,}/g;

str = str.split(rule).join(" "); 

document.write(str);

Solution 9 - Javascript

I suggest

string = string.replace(/ +/g," ");

for just spaces
OR

string = string.replace(/(\s)+/g,"$1");

for turning multiple returns into a single return also.

Solution 10 - Javascript

I know that I am late to the party, but I discovered a nice solution.

Here it is:

var myStr = myStr.replace(/[ ][ ]*/g, ' ');

Solution 11 - Javascript

Also a possibility:

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

Solution 12 - Javascript

Comprehensive unencrypted answer for newbies et al.

This is for all of the dummies like me who test the scripts written by some of you guys which do not work.

The following 3 examples are the steps I took to remove special characters AND extra spaces on the following 3 websites (all of which work perfectly) {1. EtaVisa.com 2. EtaStatus.com 3. Tikun.com} so I know that these work perfectly.

We have chained these together with over 50 at a time and NO problems.

// This removed special characters + 0-9 and allows for just letters (upper and LOWER case)

function NoDoublesPls1()
{
var str=document.getElementById("NoDoubles1");
var regex=/[^a-z]/gi;
str.value=str.value.replace(regex ,"");
}

// This removed special characters and allows for just letters (upper and LOWER case) and 0-9 AND spaces

function NoDoublesPls2()
{
var str=document.getElementById("NoDoubles2");
var regex=/[^a-z 0-9]/gi;
str.value=str.value.replace(regex ,"");
}

// This removed special characters and allows for just letters (upper and LOWER case) and 0-9 AND spaces // The .replace(/\s\s+/g, " ") at the end removes excessive spaces // when I used single quotes, it did not work.

function NoDoublesPls3()
{    var str=document.getElementById("NoDoubles3");
var regex=/[^a-z 0-9]/gi;
str.value=str.value.replace(regex ,"") .replace(/\s\s+/g, " ");
}

::NEXT:: Save #3 as a .js // I called mine NoDoubles.js

::NEXT:: Include your JS into your page

 <script language="JavaScript" src="js/NoDoubles.js"></script>

Include this in your form field:: such as

<INPUT type="text" name="Name"
     onKeyUp="NoDoublesPls3()" onKeyDown="NoDoublesPls3()" id="NoDoubles3"/>

So that it looks like this

<INPUT type="text" name="Name" onKeyUp="NoDoublesPls3()" onKeyDown="NoDoublesPls3()" id="NoDoubles3"/>

This will remove special characters, allow for single spaces and remove extra spaces.

Solution 13 - Javascript

var string = "The dog      has a long   tail, and it     is RED!";
var replaced = string.replace(/ +/g, " ");

Or if you also want to replace tabs:

var replaced = string.replace(/\s+/g, " ");

Solution 14 - Javascript

Jquery has trim() function which basically turns something like this " FOo Bar " into "FOo Bar".

var string = "  My     String with  Multiple lines    ";
string.trim(); // output "My String with Multiple lines"

It is much more usefull because it is automatically removes empty spaces at the beginning and at the end of string as well. No regex needed.

Solution 15 - Javascript

var text = `xxx  df dfvdfv  df    
                     dfv`.split(/[\s,\t,\r,\n]+/).filter(x=>x).join(' ');

result:

"xxx df dfvdfv df dfv"

Solution 16 - Javascript

is replace is not used, string = string.split(/\W+/);

Solution 17 - Javascript

I know we have to use regex, but during an interview, I was asked to do WITHOUT USING REGEX.

@slightlytyler helped me in coming with the below approach.

const testStr = "I   LOVE    STACKOVERFLOW   LOL";

const removeSpaces = str  => {
  const chars = str.split('');
  const nextChars = chars.reduce(
    (acc, c) => {
      if (c === ' ') {
        const lastChar = acc[acc.length - 1];
        if (lastChar === ' ') {
          return acc;
        }
      }
      return [...acc, c];
    },
    [],
  );
  const nextStr = nextChars.join('');
  return nextStr
};

console.log(removeSpaces(testStr));

Solution 18 - Javascript

var myregexp = new RegExp(/ {2,}/g);

str = str.replace(myregexp,' ');

Solution 19 - Javascript

We can use the following regex explained with the help of sed system command. The similar regex can be used in other languages and platforms.

Add the text into some file say test

manjeet-laptop:Desktop manjeet$ cat test
"The dog      has a long   tail, and it     is RED!"

We can use the following regex to replace all white spaces with single space

manjeet-laptop:Desktop manjeet$ sed 's/ \{1,\}/ /g' test
"The dog has a long tail, and it is RED!"

Hope this serves the purpose

Solution 20 - Javascript

Try this to replace multiple spaces with a single space.

<script type="text/javascript">
    var myStr = "The dog      has a long   tail, and it     is RED!";
    alert(myStr);  // Output 'The dog      has a long   tail, and it     is RED!'
    
    var newStr = myStr.replace(/  +/g, ' ');
    alert(newStr);  // Output 'The dog has a long tail, and it is RED!'
</script>

Read more @ Replacing Multiple Spaces with Single Space

Solution 21 - Javascript

For more control you can use the replace callback to handle the value.

value = "tags:HUNT  tags:HUNT         tags:HUNT  tags:HUNT"
value.replace(new RegExp(`(?:\\s+)(?:tags)`, 'g'), $1 => ` ${$1.trim()}`)
//"tags:HUNT tags:HUNT tags:HUNT tags:HUNT"

Solution 22 - Javascript

This script removes any white space (multiple spaces, tabs, returns, etc) between words and trims:

// Trims & replaces any wihtespacing to single space between words
String.prototype.clearExtraSpace = function(){
  var _trimLeft  = /^\s+/,
      _trimRight = /\s+$/,
      _multiple  = /\s+/g;

  return this.replace(_trimLeft, '').replace(_trimRight, '').replace(_multiple, ' ');
};

Solution 23 - Javascript

' mouse pointer touch '.replace(/^\s+|\s+$|(\s)+/g, "$1") should do the trick!

Solution 24 - Javascript

let nameCorrection = function (str) {
  let strPerfect = str.replace(/\s+/g, " ").trim();
  let strSmall = strPerfect.toLowerCase();
  let arrSmall = strSmall.split(" ");
  let arrCapital = [];
  for (let x of arrSmall.values()) {
    arrCapital.push(x[0].toUpperCase() + x.slice(1));
  }

  let result = arrCapital.join(" ");
  console.log(result);
};
nameCorrection("Pradeep kumar dHital");

Solution 25 - Javascript

def removeblanks(text): return re.sub(r'\s\s+'," ",text) I was working on a large textual data with a lot of duplicate spaces. The above RE worked for me. All the duplicate blank spaces were replaced by a single space.

Solution 26 - Javascript

Using nodepad++ function, below regex works fine for me,

Find: {1}\K\s+
Replace:leave it empty

Solution 27 - Javascript

my name is Edelcio Junior. If you want to prevent 2 or more white spaces, here it is a good solution to you:

<label">Name</label>
<input type="text" name="YourInputName">

<script>
  var field = document.querySelector('[name="YourInputName"]');

  field.addEventListener('keyup', function (event) {
    var userName = field.value;
    userName = userName.replace(/\s{2,}/g, ' ');
    field.value = userName;
  });
</script>

  var field = document.querySelector('[name="YourInputName"]');

  field.addEventListener('keyup', function (event) {
    var userName = field.value;
    userName = userName.replace(/\s{2,}/g, ' ');
    field.value = userName;
  });

        <!DOCTYPE html>
        <html lang="en">
          <head>
            <title>Your-title</title>
            <meta charset="utf-8">
          </head>
          <body>
            <form>
               <label>Name</label>
               <input type="text" name="YourInputName">
            </form>
          </body>
        </html>

Solution 28 - Javascript

This is working for me with Python 3

string = "The dog                has a long   tail, and it     is RED!"

while string  != string.replace("  ", ' ', -1):
    string  = string.replace("  ", ' ', -1)

print(string)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAnApprenticeView Question on Stackoverflow
Solution 1 - JavascriptBalusCView Answer on Stackoverflow
Solution 2 - JavascriptEdward LoperView Answer on Stackoverflow
Solution 3 - JavascriptwatainView Answer on Stackoverflow
Solution 4 - JavascriptEthanView Answer on Stackoverflow
Solution 5 - Javascriptmeder omuralievView Answer on Stackoverflow
Solution 6 - JavascriptJoel PeltonenView Answer on Stackoverflow
Solution 7 - JavascriptChrisView Answer on Stackoverflow
Solution 8 - JavascriptimosView Answer on Stackoverflow
Solution 9 - JavascriptLeonard MeagherView Answer on Stackoverflow
Solution 10 - JavascriptToXic73View Answer on Stackoverflow
Solution 11 - JavascriptrfundukView Answer on Stackoverflow
Solution 12 - JavascriptPatFosterView Answer on Stackoverflow
Solution 13 - JavascriptBrian CampbellView Answer on Stackoverflow
Solution 14 - JavascriptEryk WróbelView Answer on Stackoverflow
Solution 15 - JavascriptToolkitView Answer on Stackoverflow
Solution 16 - JavascriptLinView Answer on Stackoverflow
Solution 17 - JavascriptxSachinxView Answer on Stackoverflow
Solution 18 - JavascriptahmetunalView Answer on Stackoverflow
Solution 19 - Javascriptminhas23View Answer on Stackoverflow
Solution 20 - Javascriptjonathan klevinView Answer on Stackoverflow
Solution 21 - JavascriptjackotonyeView Answer on Stackoverflow
Solution 22 - JavascriptOriolView Answer on Stackoverflow
Solution 23 - JavascriptRuwan EpageView Answer on Stackoverflow
Solution 24 - JavascriptP K Dhee TaalView Answer on Stackoverflow
Solution 25 - JavascriptVirajView Answer on Stackoverflow
Solution 26 - JavascriptHaji RahmatullahView Answer on Stackoverflow
Solution 27 - Javascriptuser14894693View Answer on Stackoverflow
Solution 28 - JavascriptWaqar DongreView Answer on Stackoverflow