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
Post a Comment