একাধিক অন্যান্য স্ট্রিং সহ একাধিক স্ট্রিং প্রতিস্থাপন করুন


213

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

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

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".

আমি ইতিমধ্যে প্রতিস্থাপন করা শব্দের প্রতিস্থাপন না করে একাধিক শব্দের সাথে একাধিক শব্দের সাথে একাধিক শব্দ প্রতিস্থাপন করতে চাই।
অ্যান্ডারসন সবুজ

আমি কিছু আলাদা জিজ্ঞাসা করেছি, যদি আমি না জানতাম যে ব্যবহারকারী বিড়াল বা কুকুর বা ছাগল প্রবেশ করতে চলেছে (এটি এলোমেলোভাবে আসছে) তবে যখনই এই ধরণের শব্দটি আসবে তখন আমাকে 'প্রাণী' বলার দরকার নেই। এই
দৃশ্যটি

উত্তর:


445

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

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

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"); 

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

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];
});

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

গতিশীল রেজেক্সের সাথে ফিডল

এটিকে পুনরায় ব্যবহারযোগ্য করে তোলা

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

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

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

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

ফাংশন সহ মজার

অবজেক্ট.কিজগুলি পুরানো ব্রাউজারগুলিতে কাজ করে তা নিশ্চিত করতে, এমডিএন বা এস 5 থেকে একটি পলিফিল যুক্ত করুন ।


4
আমি নিশ্চিত নই যে আমি এই ফাংশনটি সমস্ত ধরণের স্ট্রিংগুলি প্রতিস্থাপন করতে ব্যবহার করতে পারি, যেহেতু জাভাস্ক্রিপ্ট স্ট্রিংগুলিতে অনুমোদিত অক্ষরগুলি জাভাস্ক্রিপ্ট সনাক্তকারীগুলিতে অনুমোদিত অক্ষরগুলির মতো নয় (যেমন কীগুলি এখানে ব্যবহৃত হয়) ।
অ্যান্ডারসন গ্রিন

2
আপনি একটি জাভাস্ক্রিপ্ট সম্পত্তি হিসাবে একটি স্বেচ্ছাসেবী স্ট্রিং ব্যবহার করতে পারেন। কোন ব্যাপার না। আপনি এই .জাতীয় সমস্ত বৈশিষ্ট্য সহ স্বরলিপিটি ব্যবহার করতে পারবেন না । বন্ধনী চিহ্নিতকরণ যে কোনও স্ট্রিংয়ের সাথে কাজ করে।
বেন ম্যাককর্মিক

2
এটি সত্যই দুর্দান্ত কাজ করে। ইউরোপীয় সংখ্যায় ইংরাজির নম্বর স্বরলিপিগুলি (24,973.56 থেকে 24.973,56) রূপান্তর করার জন্য আমি এই সমাধানটি ('নির্দিষ্ট' এক) সফলভাবে ব্যবহার করছি, map={'.': ',', ',': '.'}এবং ব্যবহার করে এবং রেজেক্স /\.|,/g
Sygmoral

5
আমি এই সমাধানটি পছন্দ করি তবে আমি ক্ষেত্রে সংবেদনশীল কীগুলি ব্যবহার return mapObj[matched.toLowerCase()];করার return mapObj[matched];পর থেকে আমাকে প্রতিস্থাপন করতে হয়েছিল mapObj
মিশাল মোরাভিক

2
আপনি নিয়মিত প্রকাশের জন্য কী অব্যাহতি করতে পারেন: Object.keys(mapObj).map(key => key.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')).join('|')এই উত্তরটি
রোবস্চ করুন

9

এটি এই পরিস্থিতিতে আপনার সঠিক প্রয়োজন মেটাতে পারে না, তবে আমি সাধারণ সমাধান হিসাবে স্ট্রিংয়ের একাধিক পরামিতি প্রতিস্থাপনের জন্য এটি একটি দরকারী উপায় খুঁজে পেয়েছি। এটি প্যারামিটারগুলির সমস্ত দৃষ্টান্ত প্রতিস্থাপন করবে, সে যতবার উল্লেখ করা হয় তা নয়:

String.prototype.fmt = function (hash) {
        var string = this, key; for (key in hash) string = string.replace(new RegExp('\\{' + key + '\\}', 'gm'), hash[key]); return string
}

আপনি নিম্নলিখিত হিসাবে এটি প্রার্থনা করবে:

var person = '{title} {first} {last}'.fmt({ title: 'Agent', first: 'Jack', last: 'Bauer' });
// person = 'Agent Jack Bauer'

8

আবার প্রতিস্থাপন প্রতিরোধ করতে সংখ্যাযুক্ত আইটেম ব্যবহার করুন। যেমন

let str = "I have a %1, a %2, and a %3";
let pets = ["dog","cat", "goat"];

তারপর

str.replace(/%(\d+)/g, (_, n) => pets[+n-1])

এটি কীভাবে কাজ করে: -% \ d +% এর পরে আসা সংখ্যাগুলি সন্ধান করে। বন্ধনীগুলি নম্বরটি ক্যাপচার করে।

এই সংখ্যাটি (স্ট্রিং হিসাবে) ল্যাম্বডা ফাংশনের 2 প্যারামিটার, এন is

+ N-1 স্ট্রিংটিকে সংখ্যায় রূপান্তর করে তারপরে 1 টি পোষ্য অ্যারে সূচকে বিয়োগ করা হয়।

% নম্বরটি তারপরে অ্যারে সূচকগুলিতে স্ট্রিংয়ের সাথে প্রতিস্থাপিত হয়।

/ G এর ফলে ল্যাম্বডা ফাংশনটি প্রতিটি সংখ্যার সাথে বারবার কল করা হয় যা অ্যারে থেকে স্ট্রিং দ্বারা প্রতিস্থাপিত হয়।

আধুনিক জাভাস্ক্রিপ্টে: -

replace_n=(str,...ns)=>str.replace(/%(\d+)/g,(_,n)=>ns[n-1])

মজাদার. আপনি কি প্রতিস্থাপন ফাংশন যুক্তি ব্যাখ্যা করতে পারেন?
এরিক হিপারল - কোডস্লেয়ার2010

5

এটি আমার পক্ষে কাজ করেছে:

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"


স্ট্রিংটিতে রেজেক্স অক্ষর থাকলে কাজ করে না।
রোমার

"প্রসারিত করবেন না ..." সম্পর্কে: আমি সামঞ্জস্যের ক্ষেত্রে দুটি স্ট্রিং তুলনা করতে আমার স্ট্রিং প্রসারিত করেছি, কেস-সংবেদনশীল। এই কার্যকারিতাটি স্ট্রিংয়ের দ্বারা সরবরাহ করা হয়নি তবে এটি কোনও একদিন হতে পারে যা আমার অ্যাপ্লিকেশনগুলিকে ভেঙে দিতে পারে। স্ট্রিংয়ের নিরাপদে এমন ফাংশনটি নিরাপদে অন্তর্ভুক্ত করার জন্য কি "সাবক্লাস" বা "প্রসারিত" করার কোনও উপায় আছে বা আমার অ্যাপ্লিকেশন লাইব্রেরির অংশ হিসাবে কেবল নতুন দ্বি-যুক্তি ফাংশনটি সংজ্ঞায়িত করা উচিত?
ডেভিড স্পেক্টর

4

অ্যারে.প্রোটোটাইপ.ড্রেস () ব্যবহার করে :

const arrayOfObjects = [
  { plants: 'men' },
  { smart:'dumb' },
  { peace: 'war' }
]
const sentence = 'plants are smart'

arrayOfObjects.reduce(
  (f, s) => `${f}`.replace(Object.keys(s)[0], s[Object.keys(s)[0]]), sentence
)

// as a reusable function
const replaceManyStr = (obj, sentence) => obj.reduce((f, s) => `${f}`.replace(Object.keys(s)[0], s[Object.keys(s)[0]]), sentence)

const result = replaceManyStr(arrayOfObjects , sentence1)

উদাহরণ

// /////////////    1. replacing using reduce and objects

// arrayOfObjects.reduce((f, s) => `${f}`.replace(Object.keys(s)[0], s[Object.keys(s)[0]]), sentence)

// replaces the key in object with its value if found in the sentence
// doesn't break if words aren't found

// Example

const arrayOfObjects = [
  { plants: 'men' },
  { smart:'dumb' },
  { peace: 'war' }
]
const sentence1 = 'plants are smart'
const result1 = arrayOfObjects.reduce((f, s) => `${f}`.replace(Object.keys(s)[0], s[Object.keys(s)[0]]), sentence1)

console.log(result1)

// result1: 
// men are dumb


// Extra: string insertion python style with an array of words and indexes

// usage

// arrayOfWords.reduce((f, s, i) => `${f}`.replace(`{${i}}`, s), sentence)

// where arrayOfWords has words you want to insert in sentence

// Example

// replaces as many words in the sentence as are defined in the arrayOfWords
// use python type {0}, {1} etc notation

// five to replace
const sentence2 = '{0} is {1} and {2} are {3} every {5}'

// but four in array? doesn't break
const words2 = ['man','dumb','plants','smart']

// what happens ?
const result2 = words2.reduce((f, s, i) => `${f}`.replace(`{${i}}`, s), sentence2)

console.log(result2)

// result2: 
// man is dumb and plants are smart every {5}

// replaces as many words as are defined in the array
// three to replace
const sentence3 = '{0} is {1} and {2}'

// but five in array
const words3 = ['man','dumb','plant','smart']

// what happens ? doesn't break
const result3 = words3.reduce((f, s, i) => `${f}`.replace(`{${i}}`, s), sentence3)

console.log(result3)

// result3: 
// man is dumb and plants


সর্বোত্তম উত্তর. তবে ${f}জমে থাকা মানটির জন্য চ এর পরিবর্তে ব্যবহার করার কোনও কারণ আছে ?
ডেভিড স্পেক্টর

1
আপনি যদি চান যে প্রদত্ত সমস্ত স্ট্রিং কেবলমাত্র প্রথমটি নয়, প্রতিস্থাপন করা হয়েছে তবে জি পতাকাটি যুক্ত করুন: "কনট রেজাল্ট 1 = অ্যারেঅফবজেক্টস.ড্রুস ((ফ, গুলি) => ${f}রিপ্লেস (নতুন রেজিপ্যাক্স (অবজেক্ট.কিজ (গুলি)] [ 0], 'g'), s [অবজেক্ট.কিজ (গুলি) [0]]), বাক্য 1) "
ডেভিড স্পেক্টর

2

কেবলমাত্র কেউ যদি ভাবছেন যে কেন আসল পোস্টারের সমাধানটি কাজ করছে না:

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."

হা হা ... ভালভাবে বিশ্লেষণ করা হয়েছে ... থাম্বসআপ
দীপা এমজি

1

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

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

যদি আপনি সচেতন না হন তবে এটিকে ভুল উত্তর বলে বলবেন না। আমার কেস "{" এ ": 1," বি ": 2}" এর মতোই আমি উপরের পদ্ধতিটি প্রতিস্থাপন করতাম। যদি এটি অন্যকে সাহায্য করে তবে তারা অন্যের জন্য চাইলে উত্তরটি কেবল আপনার জন্য নয়। @ কায়ার
কার্তিকায়ান.এ

আবার, আপনি কেবল একটি অর্থহীন উত্তর সরবরাহ করেছেন, আপনি যা করছেন প্রশ্নকর্তা প্রশ্নটিতে ইতিমধ্যে কি করতে পারেন, এই উত্তরটি মানুষকে বিভ্রান্ত করবে যে তারা নতুন ভাবতে পারে এবং RegExpবস্তুটি ব্যবহার করে সমস্যার সমাধান করতে পারে
Carr

এই ক্ষেত্রে, আপনার এখনও var i = new RegExp('}','g'), j = new RegExp('{','g'), k = data.replace(i,'{').replace(j,'}');
Carr

1

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

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.'

এই প্যাকেজটি আশ্চর্যজনক :) আমি যেমনটি প্রত্যাশা করেছিল ঠিক তেমন কাজ করে
বিষ্ণু প্রসাদ

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

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

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

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

3
ওপি জিজ্ঞাসা করেছিল " একই সময়ে একাধিক অন্যান্য স্ট্রিংয়ের সাথে একাধিক স্ট্রিং প্রতিস্থাপন করা কি সম্ভব "? এটি তিনটি পৃথক পদক্ষেপ।
লিটলববি টেবিলস - এউ প্রত্যাহার

1

আপনি ডিলিমিটার ব্যবহার করে স্ট্রিংটি সন্ধান এবং প্রতিস্থাপন করতে পারেন।

var obj = {
  'firstname': 'John',
  'lastname': 'Doe'
}

var text = "My firstname is {firstname} and my lastname is {lastname}"

console.log(mutliStringReplace(obj,text))

function mutliStringReplace(object, string) {
      var val = string
      var entries = Object.entries(object);
      entries.forEach((para)=> {
          var find = '{' + para[0] + '}'
          var regExp = new RegExp(find,'g')
       val = val.replace(regExp, para[1])
    })
  return val;
}


0
String.prototype.replaceSome = function() {
    var replaceWith = Array.prototype.pop.apply(arguments),
        i = 0,
        r = this,
        l = arguments.length;
    for (;i<l;i++) {
        r = r.replace(arguments[i],replaceWith);
    }
    return r;
}

/ * স্ট্রিংয়ের জন্য কিছু পদ্ধতি এটির মতো লাগে, আমরা যতটা আর্গুমেন্ট চাই এবং তার সবগুলি প্রতিস্থাপনের সাথে আমরা সর্বশেষ যুক্তিটি দিয়ে প্রতিস্থাপন করেছি 2013 কপিরাইটস এর জন্য সংরক্ষণ করা হয়েছে: ম্যাক্স আহমেদ এটির একটি উদাহরণ:

var string = "[hello i want to 'replace x' with eat]";
var replaced = string.replaceSome("]","[","'replace x' with","");
document.write(string + "<br>" + replaced); // returns hello i want to eat (without brackets)

* /

জেএসফিডাল: http://jsfiddle.net/CPj89/


0
<!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>

0

আমি এই এনপিএম প্যাকেজ স্ট্রিংনজেক্টটি https://www.npmjs.com/package/stringinject লিখেছি যা আপনাকে নিম্নলিখিতটি করতে অনুমতি দেয়

var string = stringInject("this is a {0} string for {1}", ["test", "stringInject"]);

যা অ্যারে আইটেমগুলির সাথে {0} এবং {1 replace প্রতিস্থাপন করবে এবং নীচের স্ট্রিংটি ফিরিয়ে দেবে

"this is a test string for stringInject"

অথবা আপনি স্থানধারকগুলিকে এই জাতীয় বস্তু কী এবং এর সাথে মানগুলি প্রতিস্থাপন করতে পারেন:

var str = stringInject("My username is {username} on {platform}", { username: "tjcafferkey", platform: "GitHub" });

"My username is tjcafferkey on Github" 

0

আপনি এই উদ্দেশ্যে https://www.npmjs.com/package/union-replacer ব্যবহার করতে পারেন । এটি মূলত একটি string.replace(regexp, ...)পাল্টা, যা সম্পূর্ণ পাওয়ার সংরক্ষণ করে এক পাসে একাধিক প্রতিস্থাপন ঘটায় allowsstring.replace(...)

প্রকাশ: আমি লেখক। গ্রন্থাগারটি আরও জটিল ব্যবহারকারী-কনফিগারযোগ্য প্রতিস্থাপনের সমর্থনে তৈরি করা হয়েছিল এবং এটি ক্যাপচার গ্রুপগুলি, ব্যাকরেফারেন্সগুলি এবং কলব্যাক ফাংশন প্রতিস্থাপনের মতো সমস্ত সমস্যাযুক্ত বিষয়কে সম্বোধন করে।

উপরের সমাধানগুলি সঠিক স্ট্রিং প্রতিস্থাপনের জন্য যথেষ্ট ভাল।


-1

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

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)

"ব্লাহ ব্লাহ 234433 ব্লাহ ব্লাহ" ফিরিয়ে দেয়

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


// মূল্যহীন: প্রতিস্থাপন সমস্ত ("আমার কাছে একটি বিড়াল, একটি কুকুর এবং একটি ছাগল রয়েছে।", {বিড়াল: "কুকুর", কুকুর: "ছাগল", ছাগল: "বিড়াল"}) // উত্পাদন করে: "আমার একটি বিড়াল আছে , একটি বিড়াল এবং একটি বিড়াল। "
ডিভন

-3

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));
    });
});

এই সমাধানটির জন্য কি জিকুয়ের প্রয়োজন?
অ্যান্ডারসন সবুজ

জাভাস্ক্রিপ্ট ট্যাগ প্রশ্নে যুক্ত হয়েছে, এবং jquery হ'ল জাভাস্ক্রিপ্ট একটি libarary।
সুপার মডেল

2
@সুপার javascript tag added in question, and jquery is a libarary of javascript. বন্ধ রয়েছে, এটি ট্যাগ তথ্য থেকে অন্যভাবে হওয়া উচিত, এবং কেবল একটি মাথা উঁচু করা উচিত: " যদি কোনও ফ্রেমওয়ার্ক / লাইব্রেরির জন্য অন্য কোনও ট্যাগও অন্তর্ভুক্ত না করা হয় তবে খাঁটি জাভাস্ক্রিপ্টের উত্তর আশা করা যায়। "
ট্র্যাকোসো

অ্যান্ডারসন গ্রিন, হ্যাঁ উপরের স্ক্রিপ্টের জন্য জ্যাকুরির প্রয়োজন।
সুপার মডেল

@ ট্র্যাক্সো, বেশিরভাগ ওয়েব অ্যাপ্লিকেশনগুলিতে আমরা ফ্রেমওয়ার্ক (বুটস্ট্র্যাপ / গুগল উপাদান) ব্যবহার করছি। Jquery সমস্ত আধুনিক ফ্রেমওয়ার্ক অন্তর্ভুক্ত। সুতরাং, ওয়েব অ্যাপ্লিকেশনগুলির জন্য jquery প্রয়োজনীয় আইটেম।
সুপার মডেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.