জাভাস্ক্রিপ্ট ব্যবহার করে স্ট্রিংয়ের সমস্ত বিন্দু কীভাবে প্রতিস্থাপন করবেন


426

আমি .একটি জাভাস্ক্রিপ্ট স্ট্রিংয়ে ডট ( ) এর সমস্ত উপস্থিতি প্রতিস্থাপন করতে চাই

উদাহরণস্বরূপ, আমার আছে:

var mystring = 'okay.this.is.a.string';

আমি পেতে চাই: okay this is a string।

এখনও পর্যন্ত আমি চেষ্টা করেছি:

mystring.replace(/./g,' ')

তবে এটি স্পেসে প্রতিস্থাপিত সমস্ত স্ট্রিংয়ের সাথে শেষ হয়।


8
এএফএক্সএক্সের উত্তরটি সঠিক, তবে ঠিক যেমন একটি এফওয়াইআইআই হ'ল একটি রেজেক্সের পিরিয়ড চরিত্রটি মানে সমস্ত কিছু মিলে যায় , সুতরাং সবকিছুই একটি স্থান হয়ে যায়। ব্যাকস্ল্যাশ দিয়ে এড়িয়ে যাওয়া মানে পিরিয়ডের সাথে মিল।
— সুইলিয়ামস

ভকভগক. রেজেেক্সের সাথে আমার কিছু এএএচএ মুহুর্ত রয়েছে (অ্যাপটি তৈরি করার সময়)। আমি সত্যিই এটি ঘৃণা করি _ , আপনার কি কিছু দুর্দান্ত, ভাল টিউটোরিয়াল আছে?
— ওমর আবিদ

রুবুলার ডট কম যা আপনি খুঁজছেন
— ল্যাঙ্গুয়েজসনমেডএফটারকফি


দুর্ভাগ্যক্রমে এটি দেখে মনে হচ্ছে না যে কোনও নন-রেজেক্স একাধিকবার স্ট্রিং প্রতিস্থাপনের অনুমতি দিতে পারে।
— স্টিভেন লু

উত্তর:


777

আপনার এড়াতে হবে .কারণ এটি একটি নিয়মিত অভিব্যক্তিতে "একটি স্বেচ্ছাচারিত চরিত্র" এর অর্থ।

mystring = mystring.replace(/\./g,' ')

25
কেবল পরিষ্কার করার জন্য, regular নিয়মিত অভিব্যক্তিগুলির মতো বিশেষ অক্ষরগুলি থেকে পালিয়ে যায়। এই ক্ষেত্রে
— realgt

শেডের মতো দেখাচ্ছে .. কোনওভাবে .. :)
— পাসচলিস

রেগুকারের বিন্দুতে বিন্দু। সব মানে, এই এক সঠিক সমাধান!
— বেনিয়ামিন ফুয়েন্তেস

1
@ কিঙ্গালিয়ন কি কার্যকরভাবে কাজ করে না? আপনি বিস্তারিত বলতে পারেন?
— এফএফএক্সএক্স

1
@ ওয়েবউম্যান এটিই gযা প্রকাশের শেষে সংশোধনকারী ব্যবহার করা হয়। এটিকে (ছ) একাগ্রভাবে মনে করুন।
— এএফএক্সএক্স

301

আরও একটি সমাধান যা বোঝা সহজ :)

var newstring = mystring.split('.').join(' ');

25
@ হাগলল্যাড কারণ আপনার রেইগেক্সের সাথে জগাখিচির দরকার নেই
— টন.ইয়েং

5
এটি কি রেজেক্সিংয়ের চেয়ে ধীর গতির নয়?
— জেস্পার কেনিস

1
আমার বোঝাপড়া থেকে জ্যাস্পার, বেশিরভাগ ব্রাউজারে এটি আসলে দ্রুততর, যদিও আমি নিজে এটি নিজেই বেঞ্চমার্ক করি নি।
— অ্যান্ড্রু

9
@ বিটোফ্রেগা আপনার কেস তৈরির জন্য কিছু অনুপ্রেরণামূলক তথ্যের মতো নয় :)। লিঙ্ক সরবরাহ করার জন্য ধন্যবাদ!
— টেস্টিং 123

3
আপনি যদি রেজিএক্সপ ব্যবহার করেন, আপনি লুপের বাইরে একটি পৃথক ভেরিয়েবলে রেজেক্স সংরক্ষণ করতে চান। একটি রেজেক্সকে সংকলন / ব্যাখ্যা করতে কিছু সময় লাগে, তবে এটি একবার সংকলিত হয়ে গেলে এটি বেশ দ্রুত ব্যবহার করা যেতে পারে। দয়া করে আমি এই পরীক্ষাগুলি চেষ্টা করে দেখুন: jsperf.com/replace-vs-split-join-vs-replaceall/23
— saenderd17

53
/**
 * ReplaceAll by Fagner Brack (MIT Licensed)
 * Replaces all occurrences of a substring in a string
 */
String.prototype.replaceAll = function( token, newToken, ignoreCase ) {
    var _token;
    var str = this + "";
    var i = -1;

    if ( typeof token === "string" ) {

        if ( ignoreCase ) {

            _token = token.toLowerCase();

            while( (
                i = str.toLowerCase().indexOf(
                    _token, i >= 0 ? i + newToken.length : 0
                ) ) !== -1
            ) {
                str = str.substring( 0, i ) +
                    newToken +
                    str.substring( i + token.length );
            }

        } else {
            return this.split( token ).join( newToken );
        }

    }
return str;
};

alert('okay.this.is.a.string'.replaceAll('.', ' '));

রেজেক্স ব্যবহারের চেয়ে আরও দ্রুত ...

সম্পাদনা:
সম্ভবত আমি এই কোডটি করার সময় আমি jsperf ব্যবহার করিনি। তবে শেষ পর্যন্ত এ জাতীয় আলোচনা সম্পূর্ণ অর্থহীন, পারফরম্যান্সের পার্থক্য বাস্তব বিশ্বে কোডটির সুগঠনের পক্ষে মূল্যবান নয়, তাই আমার উত্তরটি এখনও বৈধ, এমনকি যদি পারফরম্যান্স রেজেক্স পদ্ধতির থেকে পৃথক হয়।

সম্পাদনা 2:
আমি একটি ফলস তৈরি করেছি যা আপনাকে সাবলীল ইন্টারফেস ব্যবহার করে এটি করতে দেয়:

replace('.').from('okay.this.is.a.string').with(' ');

Https://github.com/FagnerMartinsBrack/str-replace দেখুন ।


1
খুব দরকারী. এফওয়াইআই: সতর্কতা বিবৃতিতে আধা-কোলনের পরে দুর্বৃত্ত অক্ষর রয়েছে।
— প্যাট্রিক

"দুর্বৃত্ত চরিত্র" এর অর্থ কি?
— ফাগনার ব্র্যাক

1
তার অর্থ সত্তা & # 8203; দ্বিগুণ, যা ইউনিকোড চরিত্র 'জিরো প্রশস্ত স্পেস' (ইউ + 200 বি)। Fileformat.info/info/unicode/char/200b/index.htm- এ
— Cœur

@ ফাগনারব্র্যাক আপনার str.toLowerCase()কার্য সম্পাদনের কারণে সম্ভবত লুপের বাইরে চলে যেতে হবে । এছাড়াও, আপনি যে স্ট্রিংটি সন্ধান করছেন তার মধ্যে ম্যানিপুলেট করা সম্ভবত অনুকূল থেকে কম less : আমি একটি পরিবর্তিত সংস্করণের সাথে একটি উত্তর পোস্ট stackoverflow.com/questions/2390789/...
— sstur

@ স্টুর আমি মনে করি কারসাজির পরে আবার স্ট্রিংটি ছোট করা দরকার। কর্মক্ষমতাটিতে আমি যথেষ্ট পার্থক্যটি অনুসন্ধান করছি man আমি মনে করি সুগমনযোগ্যতা সুবিধাগুলি ছাড়াই (অচিহ্নিত)।
— ফাগনার ব্র্যাক


15

এই সাধারণ দৃশ্যের জন্য, আমি জাভাস্ক্রিপ্টে বিল্ট-ইন আসে এমন পদ্ধতিগুলি ব্যবহার করার পরামর্শ দেব।

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

"okay.this.is.a.string".split(".").join("")

গ্রিটিংস


6

আমি এটিকে কাজ করতে ডটে ডাবল ব্যাকস্ল্যাশ যুক্ত করি। খাওয়াদাওয়া।

var st = "okay.this.is.a.string";
var Re = new RegExp("\\.","g");
st = st.replace(Re," ");
alert(st);

4

এটি আরও সংক্ষিপ্ত / পঠনযোগ্য এবং ফাগনার ব্র্যাকের পোস্টের তুলনায় (টুলওয়ারক্যাস লুপে সঞ্চালিত হয়নি) এর চেয়ে আরও ভাল সম্পাদন করা উচিত:

String.prototype.replaceAll = function(search, replace, ignoreCase) {
  if (ignoreCase) {
    var result = [];
    var _string = this.toLowerCase();
    var _search = search.toLowerCase();
    var start = 0, match, length = _search.length;
    while ((match = _string.indexOf(_search, start)) >= 0) {
      result.push(this.slice(start, match));
      start = match + length;
    }
    result.push(this.slice(start));
  } else {
    result = this.split(search);
  }
  return result.join(replace);
}

ব্যবহার:

alert('Bananas And Bran'.replaceAll('An', '(an)'));

1
প্রকৃতপক্ষে, এটি পালিয়ে গেছে বলে মনে হচ্ছে RegEx ইন্ডেক্সঅফের চেয়ে ভাল পারফর্ম করে! : ডান শব্দ হয় না, কিন্ত JSPerf ইঙ্গিত এটা অনেক দ্রুত jsperf.com/replaceall-indexof-vs-regex
— sstur

সম্ভবত আমি সেই কোডটি করেছি তখন আমি jsperf ব্যবহার করিনি। তবে শেষ পর্যন্ত এ জাতীয় আলোচনা পুরোপুরি অর্থহীন, পারফরম্যান্সের পার্থক্য বাস্তব বিশ্বে কোডটির সুগম্যতার পক্ষে মূল্যহীন নয়, সুতরাং আমার উত্তরটি এখনও বৈধ।
— ফাগনার ব্র্যাক 16'14

2
String.prototype.replaceAll = function(character,replaceChar){
    var word = this.valueOf();

    while(word.indexOf(character) != -1)
        word = word.replace(character,replaceChar);

    return word;
}

3
: এই পেতে অসীম লুপে আটকে গেছে যদি আপনি এটি ভালো কিছু দিতে হবে না replaceAll('&', '&')? (স্বীকার করেছেন যে এটি ওপি-র প্রশ্নের কোনও মামলা নয়)
— অ্যানেন্ট্রপিক

তবে "& amp;" একটি &লুপ থাকে যাতে প্রতিস্থাপনের জন্য জিনিসগুলি কখনই শেষ হয় না (এবং স্ট্রিংটি বাড়তে থাকে)। আমি এখনই এটি চেষ্টা করেছি এবং এটি আমার ব্রাউজারটিকে লক করে দিয়েছে ...
— এ্যানট্রপিক

2

এখানে প্রতিস্থাপনের আরেকটি প্রয়োগ রয়েছে। আশা করি এটি কাউকে সাহায্য করবে।

    String.prototype.replaceAll = function (stringToFind, stringToReplace) {
        if (stringToFind === stringToReplace) return this;
        var temp = this;
        var index = temp.indexOf(stringToFind);
        while (index != -1) {
            temp = temp.replace(stringToFind, stringToReplace);
            index = temp.indexOf(stringToFind);
        }
        return temp;
    };

তারপরে আপনি এটি ব্যবহার করতে পারেন:

var myText = "আমার নাম জর্জ";
var newText = myText.replaceAll ("জর্জ", "মাইকেল");


1
এটি কেস-সংবেদনশীল অনুসন্ধান / প্রতিস্থাপন পরিচালনা করে না। সুতরাং এটি string.split(stringToFind).join(stringToReplace)
— কার্যত

0

উদাহরণ: আমি সমস্ত ডাবল উদ্ধৃতি (") একক উদ্ধৃতি (') এ প্রতিস্থাপন করতে চাই তারপরে কোডটি এর মতো হবে

var str= "\"Hello\""
var regex = new RegExp('"', 'g');
str = str.replace(regex, '\'');
console.log(str); // 'Hello'

0

@ স্ক্রিপ্টস কিছুটা সংক্ষিপ্ত এবং ছাড়াই তৈরি করেছে prototype:

function strReplaceAll(s, stringToFind, stringToReplace) {
    if (stringToFind === stringToReplace) return s;
    for (let index = s.indexOf(stringToFind); index != -1; index = s.indexOf(stringToFind))
        s = s.replace(stringToFind, stringToReplace);
    return s;
}

এটি কীভাবে স্ট্যাক আপ রয়েছে তা এখানে: http://jsperf.com/replace-vs-split-join-vs-replaceall/68


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


-1

আপনি RegExp জাভাস্ক্রিপ্ট অবজেক্ট ব্যবহার করে যে কোনও স্ট্রিং / চরিত্রের সমস্ত উপস্থিতি প্রতিস্থাপন করতে পারেন।

কোডটি এখানে,

var mystring = 'okay.this.is.a.string';

var patt = new RegExp("\\.");

while(patt.test(mystring)){

  mystring  = mystring .replace(".","");

}

-5
var mystring = 'okay.this.is.a.string';
var myNewString = escapeHtml(mystring);

function escapeHtml(text) {
if('' !== text) {
    return text.replace(/&/g, "&")
               .replace(/&lt;/g, "<")
               .replace(/&gt;/g, ">")
               .replace(/\./g,' ')
               .replace(/&quot;/g, '"')
               .replace(/&#39/g, "'");
} 

এইচটিএমএল এড়াতে, ব্যবহার করুনcreateTextNode
— ডাউনগোট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.