এক প্রতিস্থাপন কলটিতে একাধিক অক্ষর প্রতিস্থাপন করুন


256

খুব সাধারণ ছোট্ট প্রশ্ন, তবে এটি কীভাবে করা যায় তা আমি পুরোপুরি বুঝতে পারি না।

আমাকে '_' এর প্রতিটি উদাহরণ একটি স্থানের সাথে এবং '#' এর প্রতিটি উদাহরণ কোনও কিছুই / খালি দিয়ে প্রতিস্থাপন করতে হবে।

var string = '#Please send_an_information_pack_to_the_following_address:';

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

string.replace('#','').replace('_', ' ');

আমি আসলে এই জাতীয় কমান্ড শৃঙ্খলা পছন্দ করি না। এটি এক করার অন্য উপায় আছে?


: উত্তর এই প্রশ্ন দেখুন stackoverflow.com/questions/7072330/...
DeweyOx

উত্তর:


513

OR অপারেটর ব্যবহার করুন ( |):

var str = '#this #is__ __#a test###__';
str.replace(/#|_/g,''); // result: "this is a test"

আপনি একটি অক্ষর শ্রেণিও ব্যবহার করতে পারেন:

str.replace(/[#_]/g,'');

বেহালা

যদি আপনি একটি জিনিস দিয়ে হ্যাশ এবং অন্যটির সাথে আন্ডারস্কোরটি প্রতিস্থাপন করতে চান তবে আপনাকে কেবল চেইন করতে হবে। তবে, আপনি একটি প্রোটোটাইপ যোগ করতে পারেন:

String.prototype.allReplace = function(obj) {
    var retStr = this;
    for (var x in obj) {
        retStr = retStr.replace(new RegExp(x, 'g'), obj[x]);
    }
    return retStr;
};

console.log('aabbaabbcc'.allReplace({'a': 'h', 'b': 'o'}));
// console.log 'hhoohhoocc';

চেইন কেন, যদিও? আমি কোন ভুল দেখি না।


এটি দুর্দান্ত, তবে ফাঁকা ফাঁকা জায়গাগুলির সাথে আমার আন্ডারস্কোরগুলি প্রতিস্থাপন করা দরকার, আমি কি এটি করতে পারি?
শ্যানন হচকিন্স

তাই, কিন্তু এখনও আপনি আমাকে বুঝতে কিভাবে প্রতিস্থাপন এক্সপ্রেশন একটি বিট আরো ভালোভাবে কাজ করেছে চিন্তা করেছি :)
শ্যানন Hochkins

আপনার প্রোটোটাইপ কাজ করে না? আপনি কি
ঝাঁকুনির

3
এর জন্য অন্য বিকল্পটি #|_হ'ল [#_], এবং +পারফরম্যান্সের উন্নতির জন্য আপনি কোনও ধারাবাহিক ম্যাচের সাথে ম্যাচ করতেও ব্যবহার করতে পারেন
Ian

3
কুল ধন্যবাদ ... যদি ফাঁকা জায়গা এবং অন্য চিহ্নগুলির প্রয়োজন হয় তবে str.replace(/[+ -]/g,'');খালি জায়গাটি মাঝখানে রাখুন।
সমমানের

53

চেইন দুর্দান্ত, কেন এটিকে বরখাস্ত করবেন?

যাইহোক, এখানে প্রতিস্থাপনের জন্য আরও একটি বিকল্প রয়েছে:

string.replace(/#|_/g,function(match) {return (match=="#")?"":" ";})

প্রতিস্থাপনটি "" যদি ম্যাচ == "#", না হয় তবে "" চয়ন করবে।

[আপডেট] আরও জেনেরিক সমাধানের জন্য, আপনি কোনও প্রতিস্থাপনের স্ট্রিং কোনও বস্তুতে সঞ্চয় করতে পারেন:

var replaceChars={ "#":"" , "_":" " };
string.replace(/#|_/g,function(match) {return replaceChars[match];})

4
এটি অতিরিক্ত পদক্ষেপ নিন: var regex = new RegExp( Object.keys(replaceChars).join("|"), "g"); string.replace(regex,function(match) {return replaceChars[match];})এটি প্রতিস্থাপনের চর্চাগুলি সহজ করে তোলে।
রোজা

@ রোজা ধন্যবাদ অবজেক্ট.কিজ সে সময় মূলধারার ছিল না।
ক্রিস্টোফ

আমার মনে রাখতে সাহায্য করার জন্য, দ্বিতীয় প্যারামিটারটি প্রতিস্থাপনের জন্য প্রতিস্থাপন ফাংশন বিকল্পটি সম্পর্কে আমি সম্পূর্ণরূপে ভুলে গেছি :)
লাকীলুক

48

আপনি যদি একাধিক অক্ষর প্রতিস্থাপন করতে চান String.prototype.replace()তবে প্রতিস্থাপন যুক্তিটি একটি ফাংশন যা প্রতিটি ম্যাচের জন্য ডেকে আনা হয় তার সাথে আপনি কল করতে পারেন । আপনার যা দরকার তা হ'ল চরিত্রের মানচিত্রের প্রতিনিধিত্বকারী একটি অবজেক্ট যা আপনি সেই ফাংশনে ব্যবহার করবেন।

উদাহরণস্বরূপ, যদি আপনি চান তাহলে aদিয়ে প্রতিস্থাপিত x, bসঙ্গে yএবং cসঙ্গে z, আপনি ভালো কিছু করতে পারেন:

var chars = {'a':'x','b':'y','c':'z'};
var s = '234abc567bbbbac';
s = s.replace(/[abc]/g, m => chars[m]);
console.log(s);

আউটপুট :234xyz567yyyyxz


3
যেহেতু আপনি ES6 (তীর ফাংশন) ব্যবহার করেন আপনার এখানের varসাথে প্রতিস্থাপন করা উচিত const। বর্ধিত ব্রাউজার সমর্থনের বিকল্প:var s ='234abc567bbbbac'; s = s.replace(/[abc]/g, function(m) { return {'a':'x','b':'y','c':'z'}[m]; }); console.log(s);
ফেলিক্স জিনেন

1
@ ফেলিক্সগিনেন ১। আপনি বহনযোগ্যতা হ'ল ২. যদি আপনি চর বা সংজ্ঞাটি বেছে নিতে চান তবে আপনি একটি রানটাইম ত্রুটি পাবেন যা এর 'দৃust়তা,' কে মেরে ফেলবে 3.. নিখরচায় আদর্শগত বাদে অন্য কোনও পরিবর্তন এবং রেন্ডিংয়ের কোনও ওয়্যারেন্ট নেই। এটি দেখতে খুব আশ্চর্যজনক বিষয় যে এই স্নিপেটটি এখনও ডাবল ক্লিক / সিএসক্রিপ / ডাব্লু স্ক্রিপ্টে নতুনভাবে ইনস্টল উইন্ডোজ 98 এ কাজ করবে:var chars = {a:'1', b:'2', c:'3'}; var s = '123abc123'; var u = s.replace(/[abc]/g, function(m) { return chars[m]; }); WScript.echo(u);
দিমিত্রি

এটা সত্যই খুব ভালো. ধন্যবাদ। আপনি কোন স্টেটমেন্টটি কোনও স্টেটমেন্ট বা স্টেটমেন্টটি ব্যবহার করার জন্য কী সে অংশটি কী। আপনার কাছে এমন কোনও ডকুমেন্টেশন বা রেফারেন্স রয়েছে যা এটি ব্যাখ্যা করে। বেশ ভাল ব্যবহারের ক্ষেত্রে।
খ্রিস্টান ম্যাথিউ

39

/gপ্রথম ম্যাচের পরিবর্তে সমস্ত ম্যাচ প্রতিস্থাপন করতে নিয়মিত অভিব্যক্তিতে (গ্লোবাল) পতাকাটি নির্দিষ্ট করুন :

string.replace(/_/g, ' ').replace(/#/g, '')

একটি চরিত্রকে একটি জিনিস এবং অন্য কোনও চরিত্রের সাথে আলাদা আলাদা চরিত্রের প্রতিস্থাপন করতে, আপনি দুটি পৃথক কলের জন্য সত্যই পেতে পারেন না replace। আপনি ডুরকনব যেমন করেছিলেন তেমন কোনও ফাংশনে এটিকে বিমূর্ত করতে পারেন, যদিও আমি সম্ভবত এটি ফ্ল্যাট অ্যারের পরিবর্তে কী / মান জোড় হিসাবে পুরানো / নতুন দিয়ে কোনও বস্তু নিতে চাইতাম।


আমি কীভাবে হ্যাশটি অন্তর্ভুক্ত করব?
শ্যানন হচকিন্স

4

আপনি এটি চেষ্টা করতে পারেন:

function replaceStr(str, find, replace) {
    for (var i = 0; i < find.length; i++) {
        str = str.replace(new RegExp(find[i], 'gi'), replace[i]);
    }
    return str;
}

var text = "#here_is_the_one#";
var find = ["#","_"];
var replace = ['',' '];
text = replaceStr(text, find, replace);
console.log(text);

findপাওয়া replaceটেক্সট এবং প্রতিস্থাপন করা পাঠ্যকে বোঝায়

এটি কেস সংবেদনশীল চরিত্রগুলি প্রতিস্থাপন করবে। অন্যভাবে করার জন্য, প্রয়োজন অনুসারে কেবল রেজেক্স পতাকাগুলি পরিবর্তন করুন। উদাহরণস্বরূপ: সংবেদনশীল প্রতিস্থাপনের জন্য:

new RegExp(find[i], 'g')

4

আপনি কেবল এটি চেষ্টা করতে পারেন:

str.replace(/[.#]/g, 'replacechar');

এটি প্রতিস্থাপন করবে।, - এবং # আপনার প্রতিস্থাপনের সাথে!


এই উত্তরটি ইতিমধ্যে সরবরাহ করা হয়েছে এবং অন্যান্য অক্ষরের সাথে বিভিন্ন অক্ষর প্রতিস্থাপন পরিচালনা করে না, ওপি দেখুন।
শ্যানন হচকিন্স 13:25

3

RegEx ছাড়াই এটি করার একটি সহজ উপায়।
আপনি প্রোটোটাইপ এবং / বা পছন্দসই জিনিসগুলি ক্যাশে করতে পারেন।

// Example: translate( 'faded', 'abcdef', '123456' ) returns '61454'
function translate( s, sFrom, sTo ){
    for ( var out = '', i = 0; i < s.length; i++ ){
        out += sTo.charAt( sFrom.indexOf( s.charAt(i) ));
    }
    return out;
}

আমি জানি আপনি এটি বর্ণনা করেন নি, তবে কেবলমাত্র রেজেক্স ব্যবহার করা কি আরও মার্জিত নয়? str.replace(/#|_/g,'')
শ্যানন হচকিনস 6:56

1
নিবন্ধন করুন আমি রেজিএক্সে ব্যাশ করার অর্থ নেই; আমি শুধু অন্য বিকল্প দেখাচ্ছে RegEx সর্বদা স্বজ্ঞাত নয় এবং নিজেকে "হাতুড়ি হিসাবে ব্যবহার করার জন্য ধার দেয়, প্রতিটি সমস্যাকে পেরেক হিসাবে গণ্য করে"। প্লাস অন্য উত্তরগুলির দিকে তাকাতে, পুনরায় ব্যবহারযোগ্য ফাংশন হিসাবে এটি আরও দীর্ঘায়িত নয় এবং পরামিতিগুলি বোঝা সহজ। ব্যক্তিগতভাবে আমি এখানে প্রশ্নের জন্য একটি সংক্ষিপ্ত RegEx সাথে যেতে চাই এবং আপনি যদি কেবলমাত্র একটি দ্রুত ড্রপ-ইন স্নিপেট সন্ধান করেন যা আপনি সম্পূর্ণরূপে বুঝতে না পারছেন না sense
বিওজর

ঠিক আছে, আপনার যদি কোনও অক্ষর (à লা y কমান্ড বা à লা ইউনিক্স ) অনুবাদ করতে হয় তবে এটি সঠিক উত্তর বলে মনে হচ্ছে। sed tr
Edouard

3

চেষ্টা করুন:

  • মাল্টি স্ট্রিং প্রতিস্থাপন

    var str = "http://www.abc.xyz.com"; str = str.replace(/http:|www|.com/g, ''); //str is "//.abc.xyz"

  • মাল্টি চরগুলি প্রতিস্থাপন করুন

    var str = "a.b.c.d,e,f,g,h"; str = str.replace(/[.,]/g, ''); //str is "abcdefgh";

শুভকামনা!


2

আপনি যেমন প্রতিস্থাপন পদ্ধতিতে একটি RegExp বস্তু পাস করতে পারেন

var regexUnderscore = new RegExp("_", "g"); //indicates global match
var regexHash = new RegExp("#", "g");

string.replace(regexHash, "").replace(regexUnderscore, " ");

জাভাস্ক্রিপ্ট RegExp


ওপি replaceকল চেইন করতে চায় না - এটি এড়াতে সহায়তা করে না।
ডেনিস

2

yourstring = '# দয়া করে প্রেরণ করুন_আর_বিজ্ঞাপন_প্যাক_ টু_ফোলিং_এড্রেস:';

'#' এর সাথে '' প্রতিস্থাপন করুন এবং '_' একটি স্থানের সাথে প্রতিস্থাপন করুন

var newstring1 = yourstring.split('#').join('');
var newstring2 = newstring1.split('_').join(' ');

newstring2 আপনার ফলাফল


আপনার উত্তরটি jQuery এর একটি ক্ষুদ্র অংশ ব্যবহার করে না, এবং ওপি অনুসরণ করে না, '# এই # এই__ # একটি পরীক্ষা ### ' .স্প্লিট ('_')। যোগদান ('') হিসাবে কাজ করবে না আপনি আরও সাদা জায়গা দিয়ে শেষ করতে চান
শ্যানন হচকিন্স

পছন্দ করুন
হাফসুল মারু

আমার উদাহরণটি একবার দেখুন, যখন কোনও জায়গার আগে আন্ডারস্কোর বা দুটি আন্ডারস্কোর থাকে আপনি একাধিক স্পেস দিয়ে শেষ করতে পারেন।
শ্যানন হচকিন্স

@ শ্যাননহচকিনস প্রশ্নকর্তা '# দয়া করে প্রেরণ করুন_আন_ফর্মেশন_প্যাক_এ_এ_ফলোয়িং অ্যাড্রেস:'; এখানে কোন জায়গা নেই। কেন আমি এটি সম্পর্কে চিন্তা করব। যখন ভাবেন, কেন কেবল স্থান সম্পর্কে, অন্যান্য অনেক কিছুই ঘটতে পারে।
হাফসুল মারু

আমি আপনাকে var str = '#this #is__ __#a test###__';ওপিটি পুনরায় পড়ার পরামর্শ দিচ্ছি, আমিই আসল পোস্টার এবং আপনি আমার প্রথম পরিবর্তনশীলটিতে স্পষ্ট দেখতে পাচ্ছেন যে এই স্ট্রিংয়ের একাধিক স্পেস রয়েছে।
শ্যানন হচকিন্স

2

স্ট্রিং প্রোটোটাইপ ব্যবহার করে এখানে আরও একটি সংস্করণ দেওয়া আছে। উপভোগ করুন!

String.prototype.replaceAll = function(obj) {
    let finalString = '';
    let word = this;
    for (let each of word){
        for (const o in obj){
            const value = obj[o];
            if (each == o){
                each = value;
            }
        }
        finalString += each;
    }

    return finalString;
};

'abc'.replaceAll({'a':'x', 'b':'y'}); //"xyc"

1

আমি কত এই সাহায্য করবে জানি না কিন্তু আমি সরাতে চেয়েছিলেন <b>এবং </b>আমার স্ট্রিং থেকে

সুতরাং আমি ব্যবহার

mystring.replace('<b>',' ').replace('</b>','');

সুতরাং মূলত আপনি যদি চান সীমিত সংখ্যক চরিত্র হ্রাস করতে চান এবং সময় নষ্ট না করেন এটি কার্যকর হবে।


-1

এখানে 'কমান' একাধিক প্রতিস্থাপন ফাংশন ব্যবহার করে একটি "নিরাপদ এইচটিএমএল" ফাংশন রয়েছে (এই ফাংশনটি প্রতিটি স্ট্রিংয়ের পুরো প্রতিস্থাপনকে প্রয়োগ করে, সুতরাং প্রতিস্থাপনগুলির মধ্যে নির্ভরতা উল্লেখযোগ্য)।

// Test:
document.write(SafeHTML('<div>\n\
    x</div>'));

function SafeHTML(str)
    {
    const replacements = [
        {'&':'&amp;'},
        {'<':'&lt;'},
        {'>':'&gt;'},
        {'"':'&quot;'},
        {"'":'&apos;'},
        {'`':'&grave;'},
        {'\n':'<br>'},
        {' ':'&nbsp;'}
        ];
    return replaceManyStr(replacements,str);
    } // HTMLToSafeHTML

function replaceManyStr(replacements,str)
    {
    return replacements.reduce((accum,t) => accum.replace(new RegExp(Object.keys(t)[0],'g'),t[Object.keys(t)[0]]),str);
    }

পোস্টটির জন্য ধন্যবাদ, তবে এটি গৃহীত উত্তরের তুলনায় বেশ বিস্তৃত
শ্যানন হচকিন্স

প্রশ্নের উত্তরটি একটি লাইন ফাংশন। কিভাবে এটি "বিস্তৃত"? ব্যবহারকারী ইনপুট নিরাপদ করা একটি গুরুত্বপূর্ণ উদাহরণ। আপনি খুব সমালোচিত। 'হ্রাস' একটি খুব কার্যকর কৌশল যা সম্পর্কে আপনার জানা উচিত।
ডেভিড স্পেক্টর

আমি বলেছিলাম যে আপনার উত্তরটি খুব বিস্তৃত, এটি আরও অনেক বেশি কোড, আপনি যেভাবেই নিয়মিত ভাব প্রকাশ করছেন, কেবল প্রক্রিয়াটিকে আরও বিশৃঙ্খল করে তুলছেন, নিশ্চিত হবেন না যে এই উত্তরগুলির তুলনায় আপনার উত্তর কীভাবে হ্রাস পেয়েছে ...
শ্যানন Hochkins

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

প্রকৃতপক্ষে আমি থ্যাঙ্কিও বলেছিলাম, এবং আপনাকে সমালোচনা দিয়েছিলাম, আপনি তা নিয়েছিলেন এবং সিদ্ধান্ত নেবেন কিছু ছদ্মবেশী ফিরে, যদি আমরা প্রোটোটাইপিকাল শৃঙ্খলিত পদ্ধতির পরিবর্তে কার্য সম্পাদনের জন্য কার্যনির্বাহী পদ্ধতি দিয়ে শুরু করতে যাব, তবে আরও সহজ কিছু যেমন: জিসফিল । নেট / শ্যাননহোখিনকিনস / xsm9j610 / 21
শ্যানন হচকিন্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.