replaceAll by map

Run Settings
LanguageJavaScript
Language Version
Run Command
//just like replaceAll.k as regexp and v as replace statement. String.prototype.replaceMap = function () { var args = arguments, len = arguments.length; var judge = Object.prototype.toString, $string = "[object String]", $object = "[object Object]"; var $this = this, obj = {}; // 0x0 string,string // 0x1 object... // 0x2 object...function if (len === 0 || (len === 1 && judge.call(args[0]) !== $object)) { throw new Error("arguments type error !"); } if (len > 2) { //check and merge for (var i = 0; i < len - 1; i++) { if (judge.call(args[i]) !== $object) { throw new Error("arguments type error !"); } obj = Object.assign(obj, args[i]); } } //0x0 if (judge.call(args[0]) === $string){ if(judge.call(args[1]) === $string) { return this.replace(new RegExp(args[0], "gm"), args[1]); }else if(typeof args[1] === "function"){ return this.replace(new RegExp(args[0], "gm"), args[1](args[0])); }else{ throw new Error("arguments type error !"); } } else if (judge.call(args[0]) === $object) { obj = Object.assign(obj, args[0]); //0x1 if (judge.call(args[len - 1]) === $object) { obj = Object.assign(obj, args[len - 1]); return deal(obj); //0x2 } else if (typeof args[len - 1] === "function") { return deal(obj, args[len - 1]) } else { throw new Error("arguments type error !"); } } else { throw new Error("arguments type error !"); } function deal(obj, cb) { console.log("src: ", obj); var ret = $this; if (cb) { for (var key in obj) { ret = ret.replace(new RegExp(key, "gm"), cb(obj[key], key, obj)); } } else { for (var key in obj) { ret = ret.replace(new RegExp(key, "gm"), obj[key]); } } return ret; } return $this; } //test var str = "abc/微笑,sdf/zz,/#hello"; //eg // var str = str.replaceMap("/微笑","86"); var str = str.replaceMap({ "/微笑": 86, "/爱心": 33 }); var str = str.replaceMap({ "/微笑": 86, "/爱心": 33 }, { "/zz": 111, "/爱心": 33 }); str = str.replaceMap({ "/#hello": 999 }, function (v, k, obj) { console.log(v, k, obj) return "#" + v + "#"; }); console.log(str)
Editor Settings
Theme
Key bindings
Full width
Lines