হালনাগাদ:
একটি আপডেটের জন্য এটি কিছুটা দেরি হয়ে গেছে, তবে যেহেতু আমি এই প্রশ্নটিতে কেবল হোঁচট খেয়েছি এবং লক্ষ্য করেছি যে আমার আগের উত্তরটি সেভাবে নয় যা আমি খুশি। যেহেতু প্রশ্নটি একটি শব্দ প্রতিস্থাপনের সাথে জড়িত, এটি অবিশ্বাস্য কেউ শব্দের সীমা ব্যবহার করার কথা ভাবেনি ( \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"
মূলত, এই প্রশ্নটি এখানে প্রশ্নের মতোই:
জাভাস্ক্রিপ্ট "" "" "" এর সাথে "" "প্রতিস্থাপন করে
@ মাইক, আমি সেখানে যে উত্তর দিয়েছি তা পরীক্ষা করে দেখুন ... রেজিএক্সপ্যাক্স এ থেকে দূরে কোনও সাবস্ক্রিটিংয়ের একাধিক ঘটনা প্রতিস্থাপনের একমাত্র উপায় নয়। নমনীয় ভাবুন, ভাবি ভাবেন!
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");
আউটপুট গ্রহণযোগ্য উত্তরের সমান, তবে, এই স্ট্রিংয়ে / ক্যাট / জি এক্সপ্রেশন ব্যবহার করে:
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" ??
ওফ, সত্যিই এটি আপনি যা চান তা সম্ভবত নয়। তাহলে কী? আইএমএইচও, একটি রেইজেক্স যা কেবলমাত্র 'বিড়ালকে' শর্তাধীনভাবে প্রতিস্থাপন করে। (যেমন কোনও শব্দের অংশ নয়) যেমন:
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
?