更新:
更新有点晚了,但是由于我偶然发现了这个问题,并且注意到我以前的回答不是我满意的答案。由于问题涉及替换单个单词,所以没人想到要使用单词边界(\b
),这真是令人难以置信
'a cat is not a caterpillar'.replace(/\bcat\b/gi,'dog');
//"a dog is not a caterpillar"
这是一个简单的正则表达式,在大多数情况下避免替换部分单词。但是,破折号-
仍被视为单词边界。因此在这种情况下可以使用条件语句来避免替换字符串cool-cat
:
'a cat is not a cool-cat'.replace(/\bcat\b/gi,'dog');//wrong
//"a dog is not a cool-dog" -- nips
'a cat is not a cool-cat'.replace(/(?:\b([^-]))cat(?:\b([^-]))/gi,'$1dog$2');
//"a dog is not a cool-cat"
基本上,此问题与此处的问题相同:
Javascript将“'”替换为“”
@Mike,请检查我在此处给出的答案... regexp并不是替换subsrting的多次出现的唯一方法,远非如此。想灵活,想分裂!
var newText = "the cat looks like a cat".split('cat').join('dog');
另外,为了防止替换单词部分,批准的答案也将这样做!我承认,您可以使用正则表达式解决这个问题,正则表达式有些复杂,因此,速度也稍慢一些:
var regText = "the cat looks like a cat".replace(/(?:(^|[^a-z]))(([^a-z]*)(?=cat)cat)(?![a-z])/gi,"$1dog");
输出与接受的答案相同,但是在此字符串上使用/ cat / g表达式:
var oops = 'the cat looks like a cat, not a caterpillar or coolcat'.replace(/cat/g,'dog');
//returns "the dog looks like a dog, not a dogerpillar or cooldog" ??
糟糕,这可能不是您想要的。那是什么 恕我直言,正则表达式只能有条件地替换“ cat”。(即不是单词的一部分),例如:
var caterpillar = 'the cat looks like a cat, not a caterpillar or coolcat'.replace(/(?:(^|[^a-z]))(([^a-z]*)(?=cat)cat)(?![a-z])/gi,"$1dog");
//return "the dog looks like a dog, not a caterpillar or coolcat"
我的猜测是,这可以满足您的需求。当然,它不是完全可靠的,但足以让您入门。我建议您在这些页面上阅读更多内容。实践证明,这对于完善此表达方式以满足您的特定需求很有用。
http://www.javascriptkit.com/jsref/regexp.shtml
http://www.regular-expressions.info
最后添加:
鉴于这个问题仍然有很多观点,我想我可以添加一个.replace
与回调函数一起使用的示例。在这种情况下,它极大地简化表达,并提供了更大的灵活性,如大小写正确的更换或更换两个cat
和cats
一个去:
'Two cats are not 1 Cat! They\'re just cool-cats, you caterpillar'
.replace(/(^|.\b)(cat)(s?\b.|$)/gi,function(all,char1,cat,char2)
{
//check 1st, capitalize if required
var replacement = (cat.charAt(0) === 'C' ? 'D' : 'd') + 'og';
if (char1 === ' ' && char2 === 's')
{//replace plurals, too
cat = replacement + 's';
}
else
{//do not replace if dashes are matched
cat = char1 === '-' || char2 === '-' ? cat : replacement;
}
return char1 + cat + char2;//return replacement string
});
//returns:
//Two dogs are not 1 Dog! They're just cool-cats, you caterpillar
aba
inababa
时ca
,您期望得到什么结果?caba
?abca
?cca
?