可以指定一个函数作为replace的第二个参数,这个函数可以接受一个参数,即匹配了的文本,sMatch 是匹配的文本。

解决方案 »

  1.   

    什么的JS代码跟下面这段是等价的,我想这样你应该明白了function tempFunc(sMatch){return sMatch.replace(/./g,"*");}var reBadWords=/badword1|badword2/gi;
    var sUserInput="this is a string using badword1 and badword2";
    var sFinalText=sUserInput.replace(reBadWords,tempFunc(sMatch));
    alert(sFinalText);
      

  2.   

    先要明白两个正则表达式的意思
    /badword1|badword2/gi 的意思是匹配 badword1或者badword2
    /./g 的意思是匹配除“\n”之外的任何单个字符
    整个程序就是想把 "badword1" 和 "badword2" 用相同字符数的"*"串来替代这个
    var sFinalText=sUserInput.replace(reBadWords,function(sMatch){
     return sMatch.replace(/./g,"*");});
    语句用了函数来替换
    其实现在这个函数function(sMatch){...}的参数个数并不止一个,它是根据你这个reBadWords正则的定义来确定的.又分两种情况(正则表达式中有括号和没有括号两种),你可以参考MSDN关于replace()的解释,讲的还算清楚.现在这个函数应该有3个参数的,应该是这样function($0,$1,$2).$0是匹配的子字符串,$1是偏移量,$2是原字符串对象,本例中$2是sUserInput,但是现在他只用了sMatch这一个参数.在JS中,如果函数定义中有多个参数,在调用时如果参数个数和定义时不同的话,JS会按照顺序来载入参数.所以sMatch相当于$0,正好也就是匹配到的的子字符串.