Javascript/Jquery - 如何替换一个单词但仅当它不是另一个单词的一部分时?

标签 javascript jquery

我目前正在进行正则表达式比较,以从用户编写的文本字段中删除单词(粗鲁的单词)。目前,它会在用户点击空格时执行检查,并在匹配时删除单词。但是,即使该单词是另一个单词的一部分,它也会删除该单词。因此,如果您输入 apple 后跟空格,它将被删除,没关系。但如果你输入 applepie 后跟空格,它会删除“apple”并留下“pie”,这是不行的。我试图做到这一点,以便在这种情况下,如果 apple 是另一个单词的一部分,它就不会被删除。

有什么办法可以只对整个单词进行比较,或者如果它与其他字符组合则忽略比较?

我知道这会让人们在没有空间的情况下写出很多粗鲁的东西。但这正是给我下命令的人所期望的效果:(

感谢您的帮助。

function rude(string) {

var regex = /apple|pear|orange|banana/ig; 
//exaple words because I'm sure you don't need to read profanity 

var updatedString = string.replace( regex, function(s) {
    var blank = "";
    return blank;
});
return updatedString;
}

$(input).keyup(function(event) {
   var text;
   if (event.keyCode == 32) {
       var text = rude($(this).val());
       $(this).val(text);
       $("someText").html(text);
   }
}

最佳答案

您可以使用单词边界 (\b),它匹配 0 个字符,但仅限于单词的开头或结尾。我还使用分组(括号),因此更容易阅读和编写此类表达式。

var regex = /\b(apple|pear|orange|banana)\b/ig; 

顺便说一句,在您的示例中,您不需要使用函数。这就足够了:

function rude(string) {
  var regex = /\b(apple|pear|orange|banana)\b/ig; 
  return string.replace(regex, '');
}

关于Javascript/Jquery - 如何替换一个单词但仅当它不是另一个单词的一部分时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22023637/

相关文章:

javascript - 调用嵌套函数 onClick 事件不识别嵌套函数

javascript - 如何使用 forEach 循环在 Javascript 中迭代索引

javascript - 为什么在使用 JQuery attr() 分配 ID 后无法与元素交互?

javascript - 当用户滚动到元素上方 50px 时向元素添加类?

jquery - $.fn[abcd] 是什么意思

javascript - addEventListener() 到不存在的元素?

javascript - 如何使用 Prototype 处理 iframe contentDocument

javascript - 带反压的 Rxjs 缓冲区实现

javascript - 使用 jQuery 拆分和修改元素

javascript - 将 .live() 用于 iFrame.load() 事件?