node-sensitive-word-filtering
Advanced tools
| declare class Trie { | ||
| insert(word: string): void; | ||
| contains(word: string): boolean; | ||
| delete(word: string): void; | ||
| filter(text: string, ignoreSpaces?: boolean): string; | ||
| } | ||
| export = Trie; |
+2
-1
| { | ||
| "name": "node-sensitive-word-filtering", | ||
| "version": "1.0.2", | ||
| "version": "1.0.3", | ||
| "description": "A Node.js library for filtering sensitive words using a prefix tree (Trie).", | ||
| "main": "sensitive-word-trie.js", | ||
| "types": "index.d.ts", | ||
| "author": "aliSir", | ||
@@ -7,0 +8,0 @@ "license": "MIT", |
@@ -74,6 +74,8 @@ class TrieNode { | ||
| filter(text) { | ||
| let result = ''; | ||
| filter({ text, ignoreSpaces = false, ignoreCase = false }) { | ||
| const resultArray = []; | ||
| const characters = Array.from(ignoreCase ? text.toLowerCase() : text); | ||
| const originalChars = Array.from(text); | ||
| let i = 0; | ||
| const characters = Array.from(text); | ||
| while (i < characters.length) { | ||
@@ -83,3 +85,13 @@ let node = this.root; | ||
| let matchLength = 0; | ||
| while (j < characters.length && node.children[characters[j]]) { | ||
| while (j < characters.length) { | ||
| if (ignoreSpaces && characters[j] === ' ') { | ||
| j++; | ||
| continue; | ||
| } | ||
| if (!node.children[characters[j]]) { | ||
| break; | ||
| } | ||
| node = node.children[characters[j]]; | ||
@@ -91,14 +103,16 @@ j++; | ||
| } | ||
| if (matchLength > 0) { | ||
| result += '*'.repeat(matchLength); | ||
| resultArray.push('*'.repeat(matchLength)); | ||
| i += matchLength; | ||
| } else { | ||
| result += characters[i]; | ||
| resultArray.push(originalChars[i]); | ||
| i++; | ||
| } | ||
| } | ||
| return result; | ||
| return resultArray.join(''); | ||
| } | ||
| } | ||
| module.exports = Trie; | ||
| module.exports = Trie; |
4586
15.02%4
33.33%103
17.05%