var badWords = /fuck|shit|motherfuck|holyshit/g;
var testString = "fuck you man! you are a bullshit,you motherfucker ,damn it,holyshit!!!!"
var fixedString = testString.replace(badWords,function (badWord) {
    return badWord.replace(/./g,"*");
});
alert(fixedString);
如这么一段代码,里面的testString.replace方法中第二个参数是一个函数,而这个函数的参数badWord的值怎么感觉默认就相当于符合RegExp而被替换了的词汇呢? 

解决方案 »

  1.   

    badword  就是字符串本身啊
      

  2.   

    只是一个参数名第一个参数相当于$&、第二个相当于$1、第三个相当于$2
            var fixedString = testString.replace(badWords,function () {
                return arguments[0].replace(/./g,"*");
            });
      

  3.   


    呃 只有5楼懂了我的意思,表达能力确实有问题,谢了呃。。可我还是有点想不通,replace方法里的第二个参数,也就是那个function函数的参数运行时候是什么值呢? 难道是第一次匹配正则表达式的时候参数输入为$&,第二次匹配的时候为$1么?不然它如何能够判断被替换字符串的长度而输出相应长度的*号替代呢?
      又有一个小问题,那是不是JS里所有方法没有设置参数的话,arguments[0]都是预留着的呢?