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)

 

posted @ 2025-04-22 14:29  与f  阅读(29)  评论(0)    收藏  举报