[JS代码]
var msg = "CNM,SB,NMSL,MB,FUCK,hhhhh";
console.log(filterWords(msg, "*")); //结果为*,*,*,*,*,hhhhh
console.log(filterWords(msg, "#", { isEqual: true })); //结果为###,##,####,##,####,hhhhh
//msg:所传入需要过滤的字符串 replacedStr:指定的替换符号 options:是否等数量替换
function filterWords(msg, replacedStr, options) {
//定义一个对象用于存放初始的值
var defaultOptions = {
isEqual: false,
keyWordList: ["CNM", "SB", "NMSL", "MB", "FUCK"], //敏感词列表
};
//判断options对象是否传入了参数,如果传入了就将所传入参数中的属性赋值给函数内自定义的属性(覆盖初始默认值)
if (options) {
for (var key in options) {
defaultOptions[key] = options[key];
}
}
//给初始值对象敏感词列表中添加符号|并用于创建新的正则
var rules = defaultOptions.keyWordList.join("|");
var reg = new RegExp(rules, "ig");
//替换
msg = msg.replace(reg, function (text) {
// 接收一个回调函数,根据回调函数的返回值决定替换的内容
// text => 正则匹配匹配到的敏感词
console.log(text); //this依次指向reg中的字符串
return defaultOptions.isEqual
? replacedStr.repeat(text.length) //str.repeat(n) => 将str重复n次
: replacedStr;
//如果isEqual:true => 用等长度的*号依次替换this所指向的字符串,否则直接全部替换为一个字符串
});
return msg;
}