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

时间:2014-02-25 18:58:32

标签: javascript jquery

我正在进行正则表达式比较,以便在用户编写时从文本字段中删除单词(粗鲁的单词)。目前,它在用户点击空间时执行检查,如果匹配则删除单词。但是,即使它是另一个单词的一部分,它也会删除该单词。因此,如果您键入apple后跟空格,它将被删除,这没关系。但是如果你键入applepie后跟空格它将删除'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);
   }
}

1 个答案:

答案 0 :(得分:3)

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

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

BTW,在您的示例中,您不需要使用函数。这就足够了:

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