केस असंवेदनशील सभी की जगह


83

मैं केस असंवेदनशील रिप्लेसिंग फंक्शन के किसी भी कार्यान्वयन की तलाश कर रहा हूं। उदाहरण के लिए, इसे इस तरह काम करना चाहिए:

'This iS IIS'.replaceAll('is', 'as');

और परिणाम होना चाहिए:

'Thas as Ias'

कोई विचार?

अपडेट करें:

यह चर के साथ उपयोग करने के लिए बहुत अच्छा होगा:

var searchStr = 'is';
'This iS IIS'.replaceAll(searchStr, 'as');

जवाबों:


144

रेगेक्स आज़माएं:

'This iS IIS'.replace(/is/ig, 'as');

काम करने का उदाहरण: http://jsfiddle.net/9xAse/

जैसे:
RegExp ऑब्जेक्ट का उपयोग करना:

var searchMask = "is";
var regEx = new RegExp(searchMask, "ig");
var replaceMask = "as";

var result = 'This iS IIS'.replace(regEx, replaceMask);

2
महान! लेकिन इसके बजाय चर का उपयोग कैसे करें? .replace(searchMask, replaceMask)?
— सर्गेई मेटलोव

@ डोटनेट निंजा: एक उदाहरण के साथ पोस्ट अपडेट करें।
— चंदू

अगर मैं दूसरे कोड के नमूने के लिए दो अपवॉट देता हूं, जो वास्तव में बताता है कि क्या चल रहा है
— क्रिस मैरिसिक

8
चेतावनी: यह जवाब एक गड़बड़ कर देगा जब एक चरित्र है जिसमें एक रेगेक्स अर्थ है। सही दृष्टिकोण के लिए बेंजामिन फ्लेमिंग द्वारा उत्तर देखें।
— फ्लोरियनबी

बहुत बहुत धन्यवाद दोस्त! मैं सीधे स्ट्रिंग में कोशिश कर रहा था।
— सौरभ प्रजापति

55
String.prototype.replaceAll = function(strReplace, strWith) {
    // See http://stackoverflow.com/a/3561711/556609
    var esc = strReplace.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
    var reg = new RegExp(esc, 'ig');
    return this.replace(reg, strWith);
};

यह आपके द्वारा प्रदान किए गए उदाहरण के समान है।

'This iS IIS'.replaceAll('is', 'as');

रिटर्न

'Thas as Ias'

1
यह वास्तव में सही समाधान है। चंदू द्वारा उत्तर देने पर एक गड़बड़ हो जाएगी जब एक ऐसा चरित्र होता है जिसमें एक रेगेक्स अर्थ होता है।
— फ्लोरियनबी

यह भी मामलों को संभाल सकता है जैसे: txt.replaceAll ("(test12)", "")
— user1400290

अब तक का सबसे अच्छा समाधान। एक इलाज करता है। धन्यवाद बेन।
— Ste

8

जब आप रेगेक्स समाधान का उपयोग करते हैं तो आपको समस्या हो सकती है यदि आपके प्रतिस्थापित स्ट्रिंग में उदा ""? इसलिए आपको सभी regex वर्णों से बचना होगा या उदाहरण के लिए उपयोग करना होगा:

String.replacei = String.prototype.replacei = function (rep, rby) {
    var pos = this.toLowerCase().indexOf(rep.toLowerCase());
    return pos == -1 ? this : this.substr(0, pos) + rby + this.substr(pos + rep.length);
};

यह स्ट्रिंग में 'है' की सभी घटनाओं को नहीं बदलेगा। इसलिए आप फ़ंक्शन में थोड़ी लूप लिख सकते हैं।



1
यह केवल एक समय की जगह
— लेता है

4

यह पॉल के जवाब से आशंका है, और रेगेक्स बनाम नॉन-रेगेक्स के बीच एक प्रदर्शन अंतर है

तुलना के लिए regex कोड बेंजामिन फ्लेमिंग का उत्तर लिया गया है।

JSPerf
केस-सेंसिटिव
रेगेक्स: 66,542 ऑपरेशंस / सेकंड
नॉन-रेगेक्स: 178,636 ऑपरेशंस / सेकंड (स्प्लिट - जॉइन)


Incase -sensitive Regex: 37,837 ऑपरेशंस / सेकंड
नॉन-रेगेक्स: 12,566 ऑपरेशंस / सेक ( इंडेक्सऑफिस - पावर पार्ट )

String.prototype.replaces = function(str, replace, incaseSensitive) {
    if(!incaseSensitive){
        return this.split(str).join(replace);
    } else { 
        // Replace this part with regex for more performance

        var strLower = this.toLowerCase();
        var findLower = String(str).toLowerCase();
        var strTemp = this.toString();

        var pos = strLower.length;
        while((pos = strLower.lastIndexOf(findLower, pos)) != -1){
            strTemp = strTemp.substr(0, pos) + replace + strTemp.substr(pos + findLower.length);
            pos--;
        }
        return strTemp;
    }
};

// Example
var text = "A Quick Dog Jumps Over The Lazy Dog";
console.log(text.replaces("dog", "Cat", true));



-2

मैं php.js से str_ireplace फंक्शन की सलाह देता हूं, जो एरेज़ से स्ट्रिंग्स को रिप्लेस भी करता है।


2
इस तरह के सरल कार्य के लिए थर्ड-पार्टी लाइब्रेरी का उपयोग करना ओवरकिल हो सकता है।
— बैल्ज़ विन्सज़
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.