# replace和实战 ** replace:把原有的字符替换成新的字符 ** > 在不使用正则的情况下,每当执行一次只能替换一个字符 var str = "zhu2015zhu2016zhu2017zhu2018"; str = str.replace("zhu", "-replace-"); //->没有实现需求 console.log(str); - 1、replace第一项的值是一个正则它的实现原理 var str = "zhu2015zhu2016zhu2017zhu2018"; str = str.replace(/zhu/g, "[OK]");// console.log(str);//[OK]2015[OK]2016[OK]2017[OK]2018 首先我们和exec捕获一样,把所有和我们正则匹配的都捕获到,然后把捕获的内容替换成我们需要替换的新内容 //-> /zhu/g 按照这个正则把str中所有可以匹配的都捕获到,然后统一都替换成"newStr" var str = "zhu2015zhu2016"; var reg = /zhu/g; console.log(reg.exec(str));//->["zhu", index: 0, input: "zhu2015zhu2016"] console.log(reg.exec(str));//->["zhu", index: ?, input: "?"] str = str.replace(/zhu/g, function () { //console.log(arguments); //第一次执行匿名函数的结果->["zhu", 0, "zhu2015zhu2016"] //第二次执行匿名函数的结果->["zhu", ?, "?"] return "newStr"; }); console.log(str); - 2、第二个参数换成一个函数 - 1)、匿名函数执行多少次,取决于正则能在字符串中捕获多少次 ->正则捕获两次,所以我们的匿名函数也执行两次 - 2)、每一次执行匿名函数,里面传递的参数值arguments和我们自己通过exec捕获到的结果是非常的类似的(即使正则有分组,我们同样可以通过arguments获取到分组捕获的内容) - 3)return: 你返回的结果是啥,就相当于把当前这一次大正则捕获的内容替换成你返回的内容 var str = "zhu2015zhu2016"; str = str.replace(/\d+/g, function () { console.log(arguments[0]);//每一次执行匿名函数把我们大正则捕获的内容获取到 return 1;//我返回的1把每一次大正则匹配捕获的内容都替换了 }); console.log(str);//->"zhu1zhu1" 例子: var str = "zhu2015zhu2016"; var reg = /(\d+)/g; str = str.replace(reg, function () { console.log(arguments,RegExp.$1);//获取每一次执行匿名函数我们正则捕获到的第一个分组中的内容 return "----" }); console.log(str); console.log(RegExp.$1);//2016 获取第一个分组捕获的内容 ##### 替换文字 var str = "20151213";//->"贰零壹伍壹贰壹叁" var ary = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"]; str = str.replace(/\d/g, function () { return ary[arguments[0]]; }); console.log(str); ##### 阿拉伯数字转为财务数字; function toChinaNumber (options) { options=options+""; options = options.replace(/^0+/, ""); var numberAry = ["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"], unitAry = ["","拾","佰","仟"], bigUnitAry = ["","万","亿"]; var targetStr = ""; var zeroFlag = 0; var i, p, nowAloneNumber; var quotient, modulus; var len=options.length; if(len==0){ targetStr += "零"; }else{ for (i = 0; i < len; i++) { p = len - i - 1; nowAloneNumber = options.substr(i, 1); quotient = p / 4;//商 modulus = p % 4;//余数 if (nowAloneNumber == "0") { zeroFlag++; } else { if (zeroFlag > 0) { targetStr += numberAry[0]; } zeroFlag = 0; targetStr += numberAry[Number(nowAloneNumber)] + unitAry[modulus]; } if (modulus == 0 && zeroFlag < 4) { targetStr += bigUnitAry[quotient]; zeroFlag = 0; } } } targetStr += "元整"; return targetStr; } var testNumber=35987; var testStr="298"; console.log(toChinaNumber(testNumber)); console.log(toChinaNumber(testStr));