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


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.