业务场景中,合作第三方的的各种AI内容审核模型,完全达不到满意的状态,奇怪这么简单的一个东西,有这么复杂吗,自己动手来一个DEMO,给开发,仅供参考。
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>关键词过滤器</title>
</head>
<body>
<h2>关键词过滤器</h2>
<textarea cols=60 rows=10 id="userInput" placeholder="请输入内容..."></textarea><br>
<button onclick="filterKeywords()">提交</button>
<h3>过滤后的内容:</h3>
<textarea cols=60 rows=10 id="filteredOutput" readonly></textarea>
<h3>关键词(用逗号分隔):</h3>
<textarea cols=60 rows=10 id="keywordsInput">http,https,qq,weixin,手机号,wx,fuck,.com,teng xun</textarea>
<script>
// 提交时获取关键词并进行过滤
function filterKeywords() {
const content = document.getElementById("userInput").value;
const keywords = getKeywords(); // 获取当前输入的关键词列表
const filteredContent = filterContent(content, keywords);
document.getElementById("filteredOutput").value = filteredContent;
}
// 获取关键词并生成数组
function getKeywords() {
const input = document.getElementById("keywordsInput").value;
return input.split(",").map(keyword => keyword.trim().toLowerCase()).filter(Boolean);
}
// 过滤内容中的关键词及前10个字符和后30个字符
function filterContent(content, keywords) {
let result = content;
// 构建适用于一般关键词和特殊关键词的正则
const generalKeywords = keywords.filter(k => !k.includes('.')).join("|"); // 一般关键词
const specialKeywords = keywords.filter(k => k.includes('.')).join("|"); // 特殊关键词
// 针对一般关键词使用单词边界匹配
const generalRegex = new RegExp(`(${generalKeywords})`, "gi");
// 针对特殊关键词,不使用单词边界
const specialRegex = new RegExp(`(${specialKeywords})`, "gi");
// 替换一般关键词及其前10个字符和后30字符
result = replaceKeywords(result, generalRegex);
// 替换特殊关键词及其前10个字符和后30字符
result = replaceKeywords(result, specialRegex);
return result;
}
// 替换内容中匹配的关键词及其前10个字符和后30个字符
function replaceKeywords(content, regex) {
let result = content;
let match;
while ((match = regex.exec(content)) !== null) {
const start = match.index;
const end = Math.min(content.length, start + match[0].length + 30); // 后30个字符
const startReplace = Math.max(0, start - 10); // 前10个字符
const replaceStr = '*'.repeat(end - startReplace); // 计算总替换长度
result = result.slice(0, startReplace) + replaceStr + result.slice(end);
regex.lastIndex = startReplace + replaceStr.length; // 更新正则搜索起点,避免无限循环
}
return result;
}
</script>
</body>
</html>
标签:JavaScript,const,示例,关键词,content,result,30,个字符 From: https://www.cnblogs.com/getuser/p/18529706