जावास्क्रिप्ट का उपयोग करके स्ट्रिंग में सभी डॉट्स को कैसे बदलें


426

मैं .एक जावास्क्रिप्ट स्ट्रिंग में एक डॉट ( ) की सभी घटनाओं को बदलना चाहता हूं

उदाहरण के लिए, मेरे पास:

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

मैं पाना चाहता हूं okay this is a string:।

अब तक मैंने कोशिश की:

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

लेकिन यह रिक्त स्थान के लिए प्रतिस्थापित सभी स्ट्रिंग के साथ समाप्त होता है।


8
aefxx का उत्तर सही है, लेकिन जैसा कि एक FYI है कि regex में पीरियड कैरेक्टर का अर्थ है सब कुछ मेल खाता है , इस प्रकार सब कुछ एक स्पेस है। बैकस्लैश के साथ इसे हटाने का मतलब है पीरियड्स पर मेल।
16

पारितोषिक के लिए धन्यवाद। मेरे पास Regex के साथ कुछ AHA मोमेंट्स (ऐप बनाते समय) हैं। मैं वास्तव में इसे नफरत करता हूँ _ , क्या आपके पास कुछ अच्छा, अच्छा ट्यूटोरियल है?
उमर आबिद

rubular.com क्या आप के लिए देख रहे हैं
LanguagesNamedAfterCofee

1
इस तुच्छ चीज़ के लिए रेगेक्स का उपयोग न करें
स्टीवन लू

दुर्भाग्य से ऐसा नहीं लगता है कि एक गैर-रेगेक्स कई बार एक स्ट्रिंग के प्रतिस्थापन की अनुमति दे सकता है।
स्टीवन लू

जवाबों:


777

आपको भागने की ज़रूरत है .क्योंकि इसका एक नियमित अभिव्यक्ति में "एक मनमाना चरित्र" का अर्थ है।

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

25
बस स्पष्ट करने के लिए, नियमित रूप से, विशेष अभिव्यक्तियों में the \ es एस्केप, जैसे। इस मामले में
20

जैसा दिखता है sed .. किसी तरह .. :)
Paschalis

अभिकर्मक में बिंदी अभिव्यक्ति। सभी का मतलब है, यह एक सही समाधान है!
बेंजामिन फ्यूंटेस

1
@Kingalione क्या सही काम नहीं करता है? क्या आप विस्तृत कर सकते हैं?
एफएक्सएक्सएक्स

1
@Webwoman कि gअभिव्यक्ति के अंत में संशोधक के लिए प्रयोग किया जाता है। इसे (जी) लॉबी के रूप में सोचें।
एफीएक्स

301

एक और उपाय जो समझना आसान है :)

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

25
@ हैगलगल क्योंकि आपको
ton.yeung

5
क्या यह बहुत धीमी नहीं है?
जैस्पर केंस

1
@ जैस्पर मेरी समझ से, यह वास्तव में अधिकांश ब्राउज़रों में तेज है, हालांकि मैंने वास्तव में इसे स्वयं बेंचमार्क नहीं किया है।
andrew

9
@BetoFrega आपका मामला बनाने के लिए कुछ अनुभवजन्य डेटा की तरह कुछ भी नहीं :)। लिंक प्रदान करने के लिए धन्यवाद!
123 पर परीक्षण

3
यदि आप RegExp का उपयोग करते हैं, तो आप लूप के बाहर एक अलग चर में रेगेक्स को स्टोर करना चाहते हैं। रेगेक्स की संकलन / व्याख्या में कुछ समय लगता है, लेकिन एक बार संकलित होने के बाद, यह बहुत तेजी से उपयोग किया जा सकता है। कृपया मेरे द्वारा किए गए इन परीक्षणों को आज़माएँ
sanderd17

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('.', ' '));

Regex का उपयोग करने की तुलना में तेज़ ...

संपादित करें:
हो सकता है कि जिस समय मैंने यह कोड किया था मैंने jsperf का उपयोग नहीं किया। लेकिन अंत में ऐसी चर्चा पूरी तरह से व्यर्थ है, प्रदर्शन अंतर वास्तविक दुनिया में कोड की सुगमता के लायक नहीं है, इसलिए मेरा जवाब अभी भी मान्य है, भले ही प्रदर्शन rexx दृष्टिकोण से अलग हो।

EDIT2:
मैंने एक लीवर बनाया है जो आपको एक धाराप्रवाह इंटरफ़ेस का उपयोग करने की अनुमति देता है:

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

Https://github.com/FagnerMartinsBrack/str-replace देखें ।


1
बहुत उपयोगी। FYI करें: सतर्क बयान में अर्ध-उपनिवेश के बाद दुष्ट चरित्र हैं।
पैट्रिक

"दुष्ट चरित्र" के लिए आपका क्या मतलब है?
फागनर ब्रैक

1
उसका मतलब है इकाई & # 8203; दो बार, जो यूनिकोड कैरेक्टर 'ZERO WIDTH SPACE' (U + 200B) है। Fileformat.info/info/unicode/char/200b/index.htm
Cœur

@FagnerBrack आपको str.toLowerCase()प्रदर्शन कारणों से संभवतः लूप से बाहर जाना चाहिए । इसके अलावा, आपके द्वारा खोजे जा रहे स्ट्रिंग में हेरफेर करना शायद इष्टतम से कम है। मैंने एक संशोधित संस्करण के साथ एक उत्तर पोस्ट किया: stackoverflow.com/questions/2390789/…
sstur

@ मुझे लगता है कि हेरफेर के बाद फिर से स्ट्रिंग को कम करना आवश्यक है। क्या स्ट्रिंग में हेरफेर कर रहा हूं मैं प्रदर्शन में काफी अंतर खोज रहा हूं? मुझे लगता है कि लाभ (अप्राप्य) से अधिक सुगमता खत्म हो जाती है।
फागनर ब्रैक


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 बचता है indexOf से बेहतर प्रदर्शन करता है! सही नहीं लगता है, लेकिन JSPerf यह बहुत तेजी से इंगित करता है: jsperf.com/replaceall-indexof-vs-regex
sstur

शायद उस समय मैंने वह कोड किया था जिसमें मैंने jsperf का उपयोग नहीं किया था। लेकिन अंत में ऐसी चर्चा पूरी तरह से व्यर्थ है, प्रदर्शन अंतर वास्तविक दुनिया में कोड की सुगमता के लायक नहीं है, इसलिए मेरा जवाब अभी भी मान्य है।
फाग्नर ब्रैक

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

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

    return word;
}

3
: इस get एक अनंत लूप में अटक यदि आप इसे की तरह कुछ नहीं देंगे 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)
sstur

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
Downgoat
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.