Javascript 如何在字符串与搜索完全匹配时替换文本

Javascript 如何在字符串与搜索完全匹配时替换文本,javascript,Javascript,我正在使用以下代码删除聊天文本中的文字: for(var i =0; i <db.banned_words.length ;i++){ cleaned_msg = cleaned_msg.replace(new RegExp(db.banned_words[i], 'g'), ''); } for(var i=0;i您的方法应该有效,因此您的问题可能存在于其他地方。但是,我可以建议您使用不同的方法吗 var banned_words = ['duck', 'cool', 'tes

我正在使用以下代码删除聊天文本中的文字:

for(var i =0; i <db.banned_words.length ;i++){
    cleaned_msg = cleaned_msg.replace(new RegExp(db.banned_words[i], 'g'), '');
}

for(var i=0;i您的方法应该有效,因此您的问题可能存在于其他地方。但是,我可以建议您使用不同的方法吗

var banned_words = ['duck', 'cool', 'test'],
    banned_words_rx = new RegExp('\\b(' + banned_words.join('|') + ')\\b', 'gi');

'this duck is very cool, so cool that I used it to test this thing'.replace(banned_words_rx, '');

Myabe当页面加载时编译正则表达式并在以后使用时,您可以获得一些性能优势。还可以使其不区分大小写和多行。然后,存在一个问题,即当禁用字数组中的字符被视为正则表达式中的特殊字符时,您的替换将无法正常工作:

var replacer={
  bannedR=[],
  init:function(){
    for(var i =0; i <db.banned_words.length ;i++){
      replacer.bannedR.push(new RegExp(db.banned_words[i]
        .replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, '\\$1')
        .replace(/\x08/g, '\\x08'), 'igm');
    }  
  },
  replace:function(msg){
    var i;
    for(i=0;i<replacer.bannedR.length;i++){
      msg=msg.replace(replacer.bannedR[i],'');
    }
    return msg;
  }
}
replacer.init();
var替换程序={
bannedR=[],
init:function(){

对于(var i=0;i如果db.banked_words是一个字符串(words)数组,那么您需要做的就是清理_msg.replace(db.banked_words[i],“”)


var_words=['badword','duck'];
var cleaned_msg=“这是一个长字符串,包含一些坏单词,如badword和duck”


用于(var i=0;我无法重现问题:。除此之外,我完全不知道您为什么要使用
RegExp
构造函数;它不是必需的:。它应该按原样工作……请注意,您的regex是区分大小写的。您可以发布您正在使用的实际正则表达式吗?@MattBall,它只会替换一次出现的被禁止的正则表达式没有使用带有
g
标志的正则表达式的单词。@basilikum我不确定你在问什么。正则表达式就在代码中。我也这么认为,但它不能代替ducking:-)没有多行代码。问题在于我的代码的另一部分。使用OR运算符很好,但是为什么要使用boundry这个词呢?如果数组中的第一个词是duck,而我使用motherducker,那么它就不会替换这个词。@HMR,我只是假设他只是想替换整个匹配项。Lee,如果你ant尝试替换这些单词,即使它们是其他单词的一部分。@LeeLoftiss,是的,尝试类似“test motherducker test2 superducker”这样的方法。替换(/[^\s]*duck[^\s]*/g',),这将是区分大小写的,只替换第一个字母:“duck duck duck”。替换(“duck”,“nope”)==“duck nope duck”//true
for(var i =0; i <banned_words.length ;i++){
    cleaned_msg = cleaned_msg.replace(banned_words[i], '');
}