views:

430

answers:

6

Hello,

I have a string of that displays like this....

1235, 3, 1343, 5, 1234, 1

I need to replace every second comma with a semicolon

i.e.

1235, 3; 1343, 5; 1234, 1

the string length will always be different but will follow the same pattern as the above i.e. digits comma space digits comma space, etc.

how can I do this with javascript? Is it possible?

Thanks, Mike

+3  A: 

How about:

var regex = /(\d+),\s(\d+),\s/g;
var str = '1235, 3, 1343, 5, 1234, 1'; 
alert(str.replace(regex, '$1, $2; ')); // 1235, 3; 1343, 5; 1234, 1
Paolo Bergantino
+6  A: 
'1235, 3, 1343, 5, 1234, 1'.replace(/([0-9]+),\s([0-9]+),\s/g, '$1, $2; ')
Dmitri Farkov
If you want to confirm correctness quickly try pasting into your browser's URL: javascript:alert('1235, 3, 1343, 5, 1234, 1'.replace(/([0-9]+),\s([0-9]+),\s/g, '$1, $2; '))
Kam
+6  A: 
var s = '1235, 3, 1343, 5, 1234, 1';
var result = s.replace(/(,[^,]*),/g,"$1;");
tnyfst
It's a valid tactic Dmitri - not sure what you mean
Peter Bailey
+1 Though this wizardry could use some explaining:)
Andomar
A: 

"1235, 3; 1343, 5; 1234, 1".replace(/(.*?),(.*?),/g, "$1,$2;");

Thomas Cowart
Removed downvote after edit, (.*?) is the nongreedy match right? So it basically means [^,] here
Andomar
+2  A: 
var myregexp = /(\d+,\s\d+),/g;
result = subject.replace(myregexp, "$1;");
Lieven
+3  A: 
var s='1235, 3, 1343, 5, 1234, 1';

s=s.replace(/([^,]+,[^,]+),/g,'$1;')

match anything that is not a comma, followed by a comma, followed by anything that is not a comma, and a comma.

replace everthing inside the parens (which doesn't include the last comma) with itself ('$1'), and add a semicolon in place of that comma.

kennebec