Mithun Sreedharan
Mithun Sreedharan

Reputation: 51274

remove unwanted commas in JavaScript

I want to remove all unnecessary commas from the start/end of the string.

eg; google, yahoo,, , should become google, yahoo.

If possible ,google,, , yahoo,, , should become google,yahoo.

I've tried the below code as a starting point, but it seems to be not working as desired.

trimCommas = function(s) {
 s = s.replace(/,*$/, "");
 s = s.replace(/^\,*/, "");
 return s;
}

Upvotes: 6

Views: 19100

Answers (9)

paxdiablo
paxdiablo

Reputation: 881243

What you need to do is replace all groups of "space and comma" with a single comma and then remove commas from the start and end:

trimCommas = function(str) {
    str = str.replace(/[,\s]*,[,\s]*/g, ",");
    str = str.replace(/^,/, "");
    str = str.replace(/,$/, "");
    return str;
}

The first one replaces every sequence of white space and commas with a single comma, provided there's at least one comma in there. This handles the edge case left in the comments for "Internet Explorer".

The second and third get rid of the comma at the start and end of string where necessary.

You can also add (to the end):

str = str.replace(/[\s]+/, " ");

to collapse multi-spaces down to one space and

str = str.replace(/,/g, ", ");

if you want them to be formatted nicely (space after each comma).

A more generalized solution would be to pass parameters to indicate behaviour:

  • Passing true for collapse will collapse the spaces within a section (a section being defined as the characters between commas).
  • Passing true for addSpace will use ", " to separate sections rather than just "," on its own.

That code follows. It may not be necessary for your particular case but it might be better for others in terms of code re-use.

trimCommas = function(str,collapse,addspace) {
    str = str.replace(/[,\s]*,[,\s]*/g, ",").replace(/^,/, "").replace(/,$/, "");
    if (collapse) {
        str = str.replace(/[\s]+/, " ");
    }
    if (addspace) {
        str = str.replace(/,/g, ", ");
    }
    return str;
}

Upvotes: 3

Andreas Louv
Andreas Louv

Reputation: 47099

You should be able to use only one replace call:

/^( *, *)+|(, *(?=,|$))+/g

Test:

'google, yahoo,, ,'.replace(/^( *, *)+|(, *(?=,|$))+/g, '');
"google, yahoo"
',google,, , yahoo,, ,'.replace(/^( *, *)+|(, *(?=,|$))+/g, '');
"google, yahoo"

Breakdown:

/
  ^( *, *)+     # Match start of string followed by zero or more spaces
                # followed by , followed by zero or more spaces.
                # Repeat one or more times
  |             # regex or
  (, *(?=,|$))+ # Match , followed by zero or more spaces which have a comma
                # after it or EOL. Repeat one or more times
/g              # `g` modifier will run on until there is no more matches

(?=...) is a look ahead will will not move the position of the match but only verify that a the characters are after the match. In our case we look for , or EOL

Upvotes: 1

filype
filype

Reputation: 8380

Not quite as sophisticated, but simple with:

',google,, , yahoo,, ,'.replace(/\s/g, '').replace(/,+/g, ',');

Upvotes: 1

Mahi
Mahi

Reputation: 1

When you want to replace ",," ",,,", ",,,," and ",,,,," below code will be removed by ",".

var abc = new String("46590,26.91667,75.81667,,,45346,27.18333,78.01667,,,45630,12.97194,77.59369,,,47413,19.07283,72.88261,,,45981,13.08784,80.27847,,");
var pqr= abc.replace(/,,/g,',').replace(/,,/g, ',');

alert(pqr);

Upvotes: 0

Victor
Victor

Reputation: 9269

My take:

var cleanStr = str.replace(/^[\s,]+/,"")
                  .replace(/[\s,]+$/,"")
                  .replace(/\s*,+\s*(,+\s*)*/g,",")

This one will work with opera, internet explorer, whatever

Actually tested this last one, and it works!

Upvotes: 4

KJ Saxena
KJ Saxena

Reputation: 21828

You need this:

s = s.replace(/[,\s]{2,}/,""); //Removes double or more commas / spaces
s = s.replace(/^,*/,""); //Removes all commas from the beginning
s = s.replace(/,*$/,""); //Removes all commas from the end

EDIT: Made all the changes - should work now.

Upvotes: 6

reko_t
reko_t

Reputation: 56430

In your example you also want to trim the commas if there's spaces between them at the start or at the end, use something like this:

str.replace(/^[,\s]+|[,\s]+$/g, '').replace(/,[,\s]*,/g, ',');

Note the use of the 'g' modifier for global replace.

Upvotes: 18

user187291
user187291

Reputation: 53940

match() is much better tool for this than replace()

 str  = "    aa,   bb,,   cc  , dd,,,";
 newStr = str.match(/[^\s,]+/g).join(",")
 alert("[" + newStr + "]")

Upvotes: 0

Kevin Peno
Kevin Peno

Reputation: 9196

First ping on Google for "Javascript Trim": http://www.somacon.com/p355.php. You seem to have implemented this using commas, and I don't see why it would be a problem (though you escaped in the second one and not in the first).

Upvotes: 1

Related Questions