js直播间的评论关键词检测
1.如果出现数组的单词则屏蔽(匹配成功)
function createSensitiveRegex(words) { const escaped = words.map(word => word.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')); return new RegExp(escaped.join('|'), 'gi'); } // 过滤函数 function filterText(text, regex) { return text.replace(regex, match => '*'.repeat(match.length)); } const sensitiveWords = ['fuck', '傻逼', '废物']; // 创建正则表达式 const sensitiveRegex = createSensitiveRegex(sensitiveWords); console.log(sensitiveRegex) // 使用示例 const userInput = '请加QQ:12345,或微信联系!FUCK you! '; const filtered = filterText(userInput, sensitiveRegex);console.log(filtered); console.log(sensitiveRegex.test(userInput));
2.如果出现数组中所有的单词则屏蔽(匹配成功)
function createMultiKeywordRegex(keywords) { const escaped = keywords.map(word => word.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') // 转义特殊字符:ml-citation{ref="1,5" data="citationList"} ); const lookaheads = escaped.map(word => `(?=.*${word})`).join(''); console.log(lookaheads) return new RegExp(`^${lookaheads}.*`, 'gi'); // 全局+不区分大小写:ml-citation{ref="7" data="citationList"} } // 示例 const regex = createMultiKeywordRegex(['微信','qq','直播']); regex.lastIndex = 0;// 重置索引 console.log(regex.test('直播间请加微信qq')); // true(同时包含“微信”和“直播”) regex.lastIndex = 0;// 重置索引 console.log(regex.test('QQ群联系')); // false(缺少“微信”和“直播”) regex.lastIndex = 0;// 重置索引 console.log(regex.test("微信联系qq后开直播")); // true(满足所有子词) regex.lastIndex = 0;// 重置索引 console.log(regex.test("微信加qqq开直播")); // true(qq完全匹配) regex.lastIndex = 0;// 重置索引 console.log(regex.test("直播用qq联系微信")); // true(顺序无关) console.log("------------");
3.将两种结合使用
const sensitiveWords1 = ['fuck', '傻逼', '废物','微信-qq-直播','太贵了','东西不好','太贵-不好','羊奶-骗人','骗子']; function createKeywordRegex(keywords){ let regexArr = []; const escaped = keywords.map(word => word.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')); regexArr.push(new RegExp(escaped.join('|'), 'gi')); keywords.forEach(word => { if (word.includes('-')) { // 有横杠词:构建包含精确边界的正则 const subWords = word.split('-'); const escaped = subWords.map(item => item.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') // 转义特殊字符 ); const lookaheads = escaped.map(word => `(?=.*${word})`).join(''); console.log(lookaheads); regexArr.push(new RegExp(`^${lookaheads}.*`, 'gi'));// 全局+不区分大小写 } }); console.log(regexArr); return regexArr; } const precompiledRegex = createKeywordRegex(sensitiveWords1);
let t1 = precompiledRegex.some(regex=>{return regex.test("东西不好");}) console.log(t1) let t2 = precompiledRegex.some(regex=>{return new RegExp(regex, 'i').test("微信加qq开直播");}) console.log(t2) let t3 = precompiledRegex.some(regex=>{return new RegExp(regex, 'i').test("微信联系直播");}) console.log(t3) let t4 = precompiledRegex.some(regex=>{return new RegExp(regex, 'i').test("QQ群联系");}) console.log(t4) let t5 = precompiledRegex.some(regex=>{return new RegExp(regex, 'i').test("请加QQ:12345,或微信联系!FUCK you! ");}) console.log(t5) let t6 = precompiledRegex.some(regex=>{return new RegExp(regex, 'i').test("东西不好,太贵了 ");}) console.log(t6)