স্ট্রিং আক্ষরিক সাথে এটি যথেষ্ট সহজ।
আসলে তা না! উদাহরণটি কেবল প্রথম ঘটনাকেই প্রতিস্থাপন করে string_to_replace। আরও সাধারণভাবে আপনি সমস্ত ঘটনাকে প্রতিস্থাপন করতে চান, সেক্ষেত্রে আপনাকে স্ট্রিংটিকে একটি বিশ্ব ( /.../g) রেজিপ্লেসে রূপান্তর করতে হবে । আপনি new RegExpকনস্ট্রাক্টর ব্যবহার করে স্ট্রিং থেকে এটি করতে পারেন :
new RegExp(string_to_replace, 'g')
এটির সাথে সমস্যাটি হ'ল স্ট্রিং আক্ষরিক কোনও রেজেক্স-বিশেষ অক্ষরগুলি স্বাভাবিক অক্ষর হওয়ার পরিবর্তে তাদের বিশেষ পদ্ধতিতে আচরণ করবে। এটি ঠিক করতে আপনাকে তাদের ব্যাকস্ল্যাশ-পালাতে হবে। দুর্ভাগ্যক্রমে, আপনার জন্য এটি করার জন্য কোনও অন্তর্নির্মিত ফাংশন নেই, সুতরাং আপনি এটি ব্যবহার করতে পারেন এটি এখানে:
function escapeRegExp(s) {
return s.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&')
}
এছাড়াও খেয়াল করুন যে আপনি যখন একটি RegExp ইন ব্যবহার করেন replace(), প্রতিস্থাপনের স্ট্রিংটিতে এখন একটি বিশেষ অক্ষরও থাকে $। আপনি $যদি আপনার প্রতিস্থাপন পাঠ্যে আক্ষরিক থাকতে চান তবে এটি অবশ্যই পালাতে হবে !
function escapeSubstitute(s) {
return s.replace(/\$/g, '$$$$');
}
(চারটি $কারণ এটি নিজেই প্রতিস্থাপনের স্ট্রিং — আরগ!)
এখন আপনি RegExp এর মাধ্যমে বৈশ্বিক স্ট্রিং প্রতিস্থাপনটি প্রয়োগ করতে পারেন:
function replace_foo(target, string_to_replace, replacement) {
var relit= escapeRegExp(string_to_replace);
var sub= escapeSubstitute(replacement);
var re= new RegExp(relit, 'g');
return target.replace(re, sub);
}
কি যে ব্যথা. ভাগ্যক্রমে আপনি যদি যা করতে চান তেমন কোনও রেগেক্সের কোনও অতিরিক্ত অংশবিহীন একটি স্ট্রিং স্ট্রিং প্রতিস্থাপন করা হয় তবে একটি দ্রুত উপায় আছে:
s.split(string_to_replace).join(replacement)
...এবং যে সব. এটি একটি সাধারণভাবে বোঝা আইডিয়াম।
বলুন আমি স্ট্রিং_ট_রেপস বাদে সবকিছু বদলাতে চাই
এর অর্থ কী, আপনি স্ট্রিংয়ের বিপক্ষে ম্যাচে অংশ না নিয়ে সমস্ত প্রবন্ধকে প্রতিস্থাপন করতে চান? ^অবশ্যই একটি প্রতিস্থাপন এটি হয় না, কারণ ^একটি স্ট্রিং অফ স্ট্রিং টোকেন, একটি অবহেলা নয় not চরিত্র গোষ্ঠীগুলির ^মধ্যে কেবল একটি উপকার []। নেতিবাচক লুকোহেডগুলিও রয়েছে (?!...)তবে জেএসক্রিপ্টে এতে সমস্যা রয়েছে তাই আপনার এটিকে সাধারণত এড়ানো উচিত।
আপনি স্ট্রিংয়ের সাথে 'সমস্ত কিছু মিলিয়ে' চেষ্টা করতে পারেন, এবং ম্যাচের স্ট্রিংগুলির মধ্যে কোনও ফাঁকা প্রসারিত ত্যাগ করতে একটি ফাংশন ব্যবহার করে:
var re= new RegExp('(.*)($|'+escapeRegExp(string_to_find)+')')
return target.replace(re, function(match) {
return match[1]===''? match[2] : replacement+match[2];
});
এখানে, আবার, একটি বিভাজন সহজ হতে পারে:
var parts= target.split(string_to_match);
for (var i= parts.length; i-->0;)
if (parts[i]!=='')
parts[i]= replacement;
return parts.join(string_to_match);
/এই ফর্মটি ব্যবহার করার সময় রেজেক্স ডিলিমিটারগুলি বাদ দিন ।