Javascript 优化亵渎过滤器的代码

Javascript 优化亵渎过滤器的代码,javascript,Javascript,我有一个聊天应用程序,我想使用亵渎过滤器 我想到了: 您将如何优化它?我觉得数组中有很多不好的单词,速度可能会很慢。使用regexp: var chatMessage = "sex it up what the fuck tits lol fuck titsss"; var badWords = ['sex', 'fUck', 'dick', 'penis', 'cum', 'tits', 'fuck']; var regExpSource = badWords.join('|'); var r

我有一个聊天应用程序,我想使用亵渎过滤器

我想到了:

您将如何优化它?我觉得数组中有很多不好的单词,速度可能会很慢。

使用regexp:

var chatMessage = "sex it up what the fuck tits lol fuck titsss";
var badWords = ['sex', 'fUck', 'dick', 'penis', 'cum', 'tits', 'fuck'];
var regExpSource = badWords.join('|');
var regExpFilter = new RegExp(regExpSource, 'ig');

console.log(regExpFilter.test(chatMessage));
并删除带有星号的单词,如:

chatMessage.replace(regExpFilter, function () {
    return '****';//Don't matter what that was a word 
});
使用regexp:

var chatMessage = "sex it up what the fuck tits lol fuck titsss";
var badWords = ['sex', 'fUck', 'dick', 'penis', 'cum', 'tits', 'fuck'];
var regExpSource = badWords.join('|');
var regExpFilter = new RegExp(regExpSource, 'ig');

console.log(regExpFilter.test(chatMessage));
并删除带有星号的单词,如:

chatMessage.replace(regExpFilter, function () {
    return '****';//Don't matter what that was a word 
});

在一个坏单词中的每个字母上加一个星号,而不在单词上循环:

chatMessage.replace(/sex|fuck|tits/gi,function( word ){
 return word.replace(/./g,'*')
});

在一个坏单词中的每个字母上加一个星号,而不在单词上循环:

chatMessage.replace(/sex|fuck|tits/gi,function( word ){
 return word.replace(/./g,'*')
});

你觉得会很慢吗?你真的测量过吗?~0.5秒到1秒,在chrome 64位和一台好的计算机上。这是0.5毫秒。你觉得它可能很慢吗?你真的测量过吗?~0.5秒到1秒,在chrome 64位和一台好的计算机上。这是0.5毫秒。你可以从数组中创建一个regexp,请参阅@Amadan的答案。对于六分仪,这将失败。事实上,将此答案扩展为包含更多诅咒词将导致更多问题。@Rob的问题是如何优化基于OPs循环的解决方案,而不是如何创建亵渎过滤器。您可以从数组中创建regexp,请参见@Amadan的答案。这对于六分仪将失败。事实上,将这个答案扩展到包含更多诅咒词将导致更多问题。@Rob的问题是如何优化基于OPs循环的解决方案,而不是如何创建亵渎过滤器。