什么的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);
var sUserInput="this is a string using badword1 and badword2";
var sFinalText=sUserInput.replace(reBadWords,tempFunc(sMatch));
alert(sFinalText);
/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,正好也就是匹配到的的子字符串.