如何 select 并替换输入字符串中的某些单词,而不考虑完整字符串。 (更多信息在下面澄清)

How to select and replace certain words in input strings regardless of the full string. (More info for clarification below)

我正在为我拥有的聊天室制作过滤器。
我成功地将 NSFW 单词变成一堆符号和星号来审查它,但许多人通过简单地在它后面加上反斜杠、句号或其他 symbol/letter 来绕过它,因为我只输入了没有的单词标点和符号。他们还提出了一些更有创意的方法,例如 eeeNSFWeee,因此过滤器不会将其视为单词。
有没有一种方法可以使过滤器 select 构成字符串中单词的某些字符并替换它们(替换或不替换与消息相关的额外字符)?

过滤器是在 javascript 和 Socket.io

中制作的

过滤代码:

    const array = [
  "NSFW",
  "Bad Word"
  "Innapropiate Word"
];

message = message
  .split(" ")
  .map((word) => (array.includes(word.toLowerCase()) ? "$#!%" : word))
  .join(" ");

举个例子,如果有人完全像那样输入“坏词”(大写不是问题),它会成功审查它。
但如果有人输入“Bad Word”。这将是一个问题,因为它有一个句点,它会把它算作一个不同的词,这就是我需要修复的。

您可以在此处采用多种方法。

如果您只想删除符号,可以使用 replace()。例如:

word.replace(/[&\/\#,+()$~%.`'"!;\^:*?<>{}_\[\]]/g, '')

您通常可以使用 Regular Expressions,它允许您匹配模式而不是精确的字符串匹配。

您还可以使用更复杂的模糊匹配库或自定义模糊匹配来实现您的目标。这 post 可能会有帮助。