अपडेट करें:
अपडेट के लिए कुछ देर हो गई है, लेकिन जब से मैंने इस सवाल पर सिर्फ ठोकर खाई है, और देखा कि मेरा पिछला जवाब वह नहीं है जिससे मैं खुश हूं। चूंकि प्रश्न में एक शब्द को बदलना शामिल है, इसलिए यह अविश्वसनीय है कि किसी ने शब्द सीमाओं का उपयोग करने के बारे में नहीं सोचा ( \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"
मूल रूप से, यह प्रश्न यहाँ के प्रश्न के समान है:
जावास्क्रिप्ट "" "" "" से प्रतिस्थापित करता है
@ माइक, मेरे द्वारा दिए गए उत्तर की जांच करें ... regexp एक उप-विभाजन की कई घटनाओं को प्रतिस्थापित करने का एकमात्र तरीका नहीं है, इससे दूर। लचीला सोचो, विभाजन सोचो!
var newText = "the cat looks like a cat".split('cat').join('dog');
वैकल्पिक रूप से, शब्द भागों को बदलने से रोकने के लिए-अनुमोदित उत्तर भी करेगा! आप नियमित अभिव्यक्ति के उपयोग से इस मुद्दे पर पहुँच सकते हैं, मैं मानता हूँ, कुछ और अधिक जटिल है और उस के एक upshot के रूप में, एक बहुत धीमी, भी:
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" ??
उफ़ वास्तव में, यह संभवतः वह नहीं है जो आप चाहते हैं। फिर क्या है? IMHO, एक रेगीक्स जो केवल 'बिल्ली' को सशर्त रूप से प्रतिस्थापित करता है। (अर्थात एक शब्द का हिस्सा नहीं), जैसे:
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
आप केababa
साथ होने वाली सभी घटनाओं की जगह लेते हैंca
, तो आप किस परिणाम की उम्मीद करते हैं?caba
?abca
?cca
?