[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;
}