string.replace method accept a regexpression as the seperator, also, you can pass some anonymous function which will work on each of the matched method;
let's see the example.
/************************************** *@Summary * this file demonstrate the use of string.replace method, which can accept some regexpression and an additional function which works on each and every element that is returned by the match * * * @Usage: * * compress( "foo=1&foo=2&blah=a&blah=b&foo=3" ) == "foo=1,2,3&blah=a,b" * * @TODO: * some more practical use of the string.replac method call * assert("a b c".replace(/a/, function() { return ""; } ) == " b c", "returning an empty result removes a match"); ***************************************/ function compress(data) { var q = [], ret = []; // in the anonymouse function, the first argument is the entire match, and followed by each, subsequent capture following. data.replace(/([^=&]+)=([^&]*)/g, function(m, key, value) { q[key] = (q[key] ? q[key] + "," : "") + value; // why do we need to return a empty string? // the return value of the replace method call will be injected back to the string as replacement. // by returning a empty string, we are clearning the matched values. return ""; }); for (var key in q) { ret.push(key + "=" + q[key]); } return ret.join("&"); }
and below is the code that test the functions above, which also shows you the tricks on how to make use of the return value from the anonymous function.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <script type="text/javascript" src="strregex.js" ></script> <script type="text/javascript" src="../unit.js"></script> <script type="text/javascript"> window.onload = function () { test("test string replace method call", function () { assert(compress("foo=1&foo=2&blah=a&blah=b&foo=3") == "foo=1,2,3&blah=a,b", "verity the compression method"); }); test("Test string replace method 2", function () { assert("a b c".replace(/a/, function () { return ""; }) == " b c", "Returning an empty result removes a match."); }); }; </script> <style> #results li.pass { color: Green } #results li.fail { color: Red} </style> </head> <body> <ul id="results" /> </body> </html>