0

假设我有字符串变量:

var animals = "catdog caT dog cat";

我不想要猫、大猫和凌乱的空白。我试过使用:

var rep = "cat"
var nocats = animals.replace(new RegExp(rep, 'g'), '');

nocats 现在是"dog catdog",而我需要"catdog dog"

我应该使用什么正则表达式?

4

2 回答 2

2

用于\b单词边界和不区分大小写(i标志)的正则表达式:

var animals = "catdog caT dog cat",
    animal = "cat"


animals.replace(new RegExp("\\b" + animal + "\\b", "gi"), "");
// "catdog  dog " needs additional trimming
于 2012-08-22T15:04:00.573 回答
0

我注意到您的问题并不完全清楚您希望如何处理字符串中的空格。假设您想折叠源字符串中的空格,这应该可以:

// " catdog      caT  dog    cat" --> "catdog dog" 
animals.replace(new RegExp('\\s*\\b' + animal + '\\b\\s*|\\s+', 'gi'), ' ').trim();

还要确保您了解单词边界断言的语义——在这种情况下,“cat-dog”将被替换为“-dog”。另一种选择是

// " cat_dog cat-dog cat dog catdog catcatdog " --> "cat_dog cat-dog dog catcatdog" 
animals.replace(new RegExp('(^|\\s+)' + animal + '(\\s+|$)|\\s+', 'gi'), ' ').trim();

供参考:正则表达式中的单词边界是什么?

于 2012-08-22T19:07:04.287 回答