Güncelleme:
Bir güncelleme için biraz geç, ama bu soruyu tökezlediğimden ve önceki cevabımın mutlu olduğum bir cevap olmadığını fark ettim. Sorusu tek kelime replaceing dahil beri 's inanılmaz kimse (kelime sınırlarını kullanarak düşünce \b
)
'a cat is not a caterpillar'.replace(/\bcat\b/gi,'dog');
//"a dog is not a caterpillar"
Bu, çoğu durumda kelimelerin parçalarını değiştirmekten kaçınan basit bir regex'tir. Ancak, kısa çizgi -
hala bir kelime sınırı olarak kabul edilir. Bu nedenle, aşağıdaki gibi dizeleri değiştirmekten kaçınmak için bu durumda koşullu kullanılabilir 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"
temel olarak, bu soru buradaki soru ile aynıdır:
Javascript "" "yerine" '' "
@Mike, orada verdiğim yanıtı kontrol edin ... regexp, bir sübvansiyonun birden fazla tekrarını değiştirmenin tek yolu değildir. Esnek düşünün, bölünmüş düşünün!
var newText = "the cat looks like a cat".split('cat').join('dog');
Alternatif olarak, kelime bölümlerinin değiştirilmesini önlemek için - onaylanan cevap da yapılacaktır! İtiraf ediyorum, biraz daha karmaşık ve bunun bir sonucu olarak, biraz daha yavaş olan düzenli ifadeleri kullanarak bu sorunu çözebilirsiniz:
var regText = "the cat looks like a cat".replace(/(?:(^|[^a-z]))(([^a-z]*)(?=cat)cat)(?![a-z])/gi,"$1dog");
Çıktı, kabul edilen yanıtla aynıdır, ancak bu dizede / cat / g ifadesi kullanılır:
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" ??
Üzgünüz, bu muhtemelen istediğiniz şey değil. Öyleyse nedir? IMHO, sadece şartlı olarak 'kedinin' yerini alan bir regex. (yani bir kelimenin parçası değil), şöyle:
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"
Tahminimce bu ihtiyaçlarınızı karşılıyor. Tabii ki tam geçirmez değil, ama başlamanız için yeterli olmalı. Bu sayfalarda biraz daha okumanızı tavsiye ederim. Bu, özel ihtiyaçlarınızı karşılamak için bu ifadeyi mükemmelleştirmede yararlı olacaktır.
http://www.javascriptkit.com/jsref/regexp.shtml
http://www.regular-expressions.info
Son ekleme:
Bu sorunun hala çok fazla görüş aldığı göz önüne alındığında, .replace
geri arama işleviyle kullanılan bir örnek ekleyebileceğimi düşündüm . Bu durumda, bu dramatik ifadeyi kolaylaştırır ve doğru büyük harf ile değiştirerek ya da her ikisi yerine gibi, daha fazla esneklik sunar cat
ve cats
bir go in:
'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
deababa
birlikteca
beklediğiniz yapmak sonuçlanır?caba
?abca
?cca
?