Javascript: Simplifying many Regular Expression .replace() into fewer Regex calls -


i have following javascript function uses lot of regex. there way can simplify this?

function encode(str){     if(typeof str==='number'){         return str;     }     if(typeof str!=='string'){         return '';     }     var enc=str;     enc=enc.replace(/_/g,'_u');  //underscore     enc=enc.replace(/(\r\n|\r|\n)/g,'_r'); //return     enc=enc.replace(/&/g,'_a');  //ampersand     enc=enc.replace(/\\/g,'_b'); //backslash     enc=enc.replace(/:/g,'_c');  //colon     enc=enc.replace(/"/g,'_d');  //double quote     enc=enc.replace(/=/g,'_e');  //equals     enc=enc.replace(/€/g,'_4');  //euro     enc=enc.replace(/\>/g,'_g'); //greater     enc=enc.replace(/#/g,'_h');  //hash     enc=enc.replace(/'/g,'_i');  //inverted comma     enc=enc.replace(/\</g,'_l'); //less     enc=enc.replace(/¬/g,'_n');  //not     enc=enc.replace(/\|/g,'_1'); //pipe     enc=enc.replace(/¦/g,'_2');  //broken pipe     enc=enc.replace(/\+/g,'_p'); //plus     enc=enc.replace(/£/g,'_3');  //pound     enc=enc.replace(/\?/g,'_q'); //question mark     enc=enc.replace(/\//g,'_s'); //slash     enc=enc.replace(/\~/g,'_t'); //tlide     enc=enc.replace(/\`/g,'_z'); //back quote     enc=enc.replace(/\s/g,'_0'); //space     enc=enc.replace(/[\u0000-\u001f]/g,'');     return enc; }; 

you can this:

var map = {     "_": "_u",     "(\r\n|\r|\n)": "_r",     "&": "_a",     /* .. etc .. */ }; var i; var enc = "_abc&"; (i in map) {     enc = enc.replace(new regexp(i, "g"), map[i]); } console.log(enc); // _uabc_a 

i used new regexp because can't compose regular expression. keep in mind don't need delimiters (/) , modifier (g) elsewhere.


Comments

Popular posts from this blog

assembly - 8086 TASM: Illegal Indexing Mode -

Java, LWJGL, OpenGL 1.1, decoding BufferedImage to Bytebuffer and binding to OpenGL across classes -

javascript - addthis share facebook and google+ url -