<!DOCTYPE html> <html lang="en"> <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,wechat,weixin,.net,.org,.cn,fuck,.com,what app</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>