javascript - একাধিক অন্যান্য স্ট্রিং সঙ্গে একাধিক স্ট্রিং প্রতিস্থাপন করুন




বিভিন্ন তত্ত্ব (8)

আমি একাধিক শব্দ সঙ্গে একটি স্ট্রিং একাধিক শব্দ প্রতিস্থাপন করার চেষ্টা করছি। স্ট্রিং "আমার একটি বিড়াল, একটি কুকুর, এবং একটি ছাগল আছে।"

যাইহোক, এটি "আমার একটি কুকুর, ছাগল এবং একটি বিড়াল আছে" উত্পন্ন করে না, বরং পরিবর্তে এটি "আমার একটি বিড়াল, একটি বিড়াল এবং একটি বিড়াল" উত্পন্ন হয় না। জাভাস্ক্রিপ্টে একই সময়ে একাধিক স্ট্রিং একাধিক স্ট্রিং প্রতিস্থাপন করা সম্ভব, তাই সঠিক ফলাফল উত্পাদিত হবে?

var str = "I have a cat, a dog, and a goat.";
str = str.replace(/cat/gi, "dog");
str = str.replace(/dog/gi, "goat");
str = str.replace(/goat/gi, "cat");

//this produces "I have a cat, a cat, and a cat"
//but I wanted to produce the string "I have a dog, a goat, and a cat".

নির্দিষ্ট সমাধান

আপনি প্রতিটি এক প্রতিস্থাপন করার জন্য একটি ফাংশন ব্যবহার করতে পারেন।

var str = "I have a cat, a dog, and a goat.";
var mapObj = {
   cat:"dog",
   dog:"goat",
   goat:"cat"
};
str = str.replace(/cat|dog|goat/gi, function(matched){
  return mapObj[matched];
});

jsfiddle উদাহরণ

এটা সাধারণকরণ

যদি আপনি গতিশীলভাবে রেজেক্স বজায় রাখতে চান এবং মানচিত্রে ভবিষ্যতের বিনিময়গুলি যুক্ত করতে চান তবে আপনি এটি করতে পারেন

new RegExp(Object.keys(mapObj).join("|"),"gi"); 

Regex উৎপন্ন করতে। সুতরাং তারপর এটা দেখতে হবে

var mapObj = {cat:"dog",dog:"goat",goat:"cat"};

var re = new RegExp(Object.keys(mapObj).join("|"),"gi");
str = str.replace(re, function(matched){
  return mapObj[matched];
});

এবং আরো প্রতিস্থাপন যোগ বা পরিবর্তন করতে আপনি শুধু মানচিত্র সম্পাদনা করতে পারে।

গতিশীল regex সঙ্গে বেহালা

এটা পুনর্ব্যবহারযোগ্য

আপনি যদি এটি একটি সাধারণ প্যাটার্ন হতে চান তবে আপনি এটির মতো ফাংশনে এটি টেনে আনতে পারেন

function replaceAll(str,mapObj){
    var re = new RegExp(Object.keys(mapObj).join("|"),"gi");

    return str.replace(re, function(matched){
        return mapObj[matched.toLowerCase()];
    });
}

সুতরাং আপনি শুধুমাত্র স্ট্রিং এবং প্রতিস্থাপনের একটি মানচিত্রটি ফাংশন করতে চান এবং এটি রূপান্তরিত স্ট্রিংটি ফেরত দিতে পারে।

ফাংশন সঙ্গে বেহালা

পুরোনো ব্রাউজারে Object.keys কাজ করে তা নিশ্চিত করার জন্য, একটি পলিফিল যেমন MDN বা Es5


Jquery ব্যবহার করে একাধিক অন্যান্য স্ট্রিং সঙ্গে একাধিক স্ট্রিং প্রতিস্থাপন

     var replacetext = {
        "abc": "123",
        "def": "456"
        "ghi": "789"
    };

    $.each(replacetext, function(txtorig,txtnew) {
$(".eng-to-urd").each(function(){
$(this).text($(this).text().replace(txtorig, txtnew));
});
});

আমার replace-once প্যাকেজ সঙ্গে, আপনি নিম্নলিখিত কাজ করতে পারে:

const replaceOnce = require('replace-once')

var str = 'I have a cat, a dog, and a goat.'
var find = ['cat', 'dog', 'goat']
var replace = ['dog', 'goat', 'cat']
replaceOnce(str, find, replace, 'gi')
//=> 'I have a dog, a goat, and a cat.'

আমি @BenMcCormicks একটি বিট প্রসারিত। নিয়মিত স্ট্রিংয়ের জন্য তার কাজ কিন্তু আমি অক্ষর বা ওয়াইল্ডকার্ড থেকে পালাতে পারিনি। এখানে আমি কি করেছি

str = "[curl] 6: blah blah 234433 blah blah";
mapObj = {'\\[curl] *': '', '\\d: *': ''};


function replaceAll (str, mapObj) {

    var arr = Object.keys(mapObj),
        re;

    $.each(arr, function (key, value) {
        re = new RegExp(value, "g");
        str = str.replace(re, function (matched) {
            return mapObj[value];
        });
    });

    return str;

}
replaceAll(str, mapObj)

ফিরে "Blah Blah 234433 Blah Blah"

এই ভাবে এটি মানচিত্রে কী কী মিলবে এবং মিলযুক্ত শব্দটি নয় '


আসল পোস্টারের সমাধানটি কাজ না করেই কেন কেউ অবাক হয়ে যায়:

var str = "I have a cat, a dog, and a goat.";

str = str.replace(/cat/gi, "dog");
// now str = "I have a dog, a dog, and a goat."

str = str.replace(/dog/gi, "goat");
// now str = "I have a goat, a goat, and a goat."

str = str.replace(/goat/gi, "cat");
// now str = "I have a cat, a cat, and a cat."

এটা আমার জন্য কাজ করেছে:

String.prototype.replaceAll = function(search, replacement) {
    var target = this;
    return target.replace(new RegExp(search, 'g'), replacement);
};

function replaceAll(str, map){
    for(key in map){
        str = str.replaceAll(key, map[key]);
    }
    return str;
}

//testing...
var str = "bat, ball, cat";
var map = {
    'bat' : 'foo',
    'ball' : 'boo',
    'cat' : 'bar'
};
var new = replaceAll(str, map);
//result: "foo, boo, bar"

ব্যবহারকারী নিয়মিত ফাংশন প্রতিস্থাপন প্যাটার্ন সংজ্ঞায়িত এবং তারপর ইনপুট স্ট্রিং কাজ প্রতিস্থাপন ফাংশন ব্যবহার,

var i = new RegExp('"{','g'),
    j = new RegExp('}"','g'),
    k = data.replace(i,'{').replace(j,'}');

<!DOCTYPE html>
<html>
<body>



<p id="demo">Mr Blue 
has a           blue house and a blue car.</p>

<button onclick="myFunction()">Try it</button>

<script>
function myFunction() {
    var str = document.getElementById("demo").innerHTML;
    var res = str.replace(/\n| |car/gi, function myFunction(x){

if(x=='\n'){return x='<br>';}
if(x==' '){return x='&nbsp';}
if(x=='car'){return x='BMW'}
else{return x;}//must need



});

    document.getElementById("demo").innerHTML = res;
}
</script>

</body>
</html>






replace