सवाल जावास्क्रिप्ट में एक स्ट्रिंग की सभी घटनाओं को कैसे बदलें?


मेरे पास यह स्ट्रिंग है:

"Test abc test test abc test test test abc test test abc"

करते हुए

str = str.replace('abc', '');

ऐसा लगता है कि केवल पहली घटना को हटा दें abc उपरोक्त स्ट्रिंग में। मैं कैसे बदल सकता हूं सब इसकी घटनाएं?


3173
2017-07-17 17:53


मूल


stackoverflow.com/questions/1137436/... - Canavar
सरल: var str = 'abcabcbabc'; str.replace(/a/g, 'x'); --> 'xbcxbcxbc - FedericoCapaldo
सावधान रहें कि फेडेरिको का विकल्प तब तक बढ़िया है जब तक आपकी स्ट्रिंग-टू-इन-प्रतिस्थापित में विशेष रेगेक्स वर्ण शामिल न हों। - Andrew
@ एंड्रयू स्पेशल रेगेक्स कैरेक्टर सामान्य पात्र होने के लिए बच सकते हैं। - modiX
किसी को भी सोचने के लिए, आप बैकस्लैश द्वारा रेगेक्स से बच सकते हैं। उदाहरण के लिए, str.replace (/ \] / g) काम करना चाहिए, लेकिन str.replace (/] / g नहीं) क्योंकि ']' एक विशेष रेगेक्स चरित्र है। - ashish-goel


जवाब:


पूर्णता के लिए, मुझे यह सोचने के लिए सोचना पड़ा कि मुझे यह करने के लिए किस विधि का उपयोग करना चाहिए। इस पृष्ठ पर अन्य उत्तरों द्वारा सुझाए गए अनुसार इसे करने के मूल रूप से दो तरीके हैं।

ध्यान दें: आम तौर पर, जावास्क्रिप्ट में अंतर्निहित प्रोटोटाइप को विस्तारित करने की आमतौर पर अनुशंसा नहीं की जाती है। मैं चित्रण के प्रयोजनों के लिए स्ट्रिंग प्रोटोटाइप पर एक्सटेंशन के रूप में प्रदान कर रहा हूं, जो कि परिकल्पनात्मक मानक विधि के विभिन्न कार्यान्वयन दिखा रहा है String अंतर्निहित प्रोटोटाइप।


नियमित अभिव्यक्ति आधारित कार्यान्वयन

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

विभाजन और जुड़ें (कार्यात्मक) कार्यान्वयन

String.prototype.replaceAll = function(search, replacement) {
    var target = this;
    return target.split(search).join(replacement);
};

दक्षता के संदर्भ में दृश्यों के पीछे नियमित अभिव्यक्ति कैसे काम करती है, इस बारे में बहुत कुछ नहीं पता, मैं विभाजन के प्रति झुकाव करने और प्रदर्शन के बारे में सोचने के बिना अतीत में कार्यान्वयन में शामिल होने के लिए प्रतिबद्ध था। जब मैंने आश्चर्य किया कि कौन सा अधिक कुशल था, और किस मार्जिन से, मैंने इसे खोजने के लिए एक बहाना के रूप में इस्तेमाल किया।

मेरे क्रोम विंडोज 8 मशीन पर, नियमित अभिव्यक्ति आधारित कार्यान्वयन सबसे तेज़ है, उसके साथ विभाजन और कार्यान्वयन में 53% धीमी हो रही है। मेरे द्वारा उपयोग किए जाने वाले लोरेम इप्सम इनपुट के लिए नियमित अभिव्यक्ति दो गुना तेज होती है।

इसकी जांच करो बेंचमार्क एक दूसरे के खिलाफ इन दो कार्यान्वयन को चला रहा है।


जैसा कि @ थॉमस लेडुक और अन्य द्वारा नीचे दी गई टिप्पणी में उल्लेख किया गया है, नियमित अभिव्यक्ति-आधारित कार्यान्वयन के साथ कोई समस्या हो सकती है यदि search इसमें कुछ वर्ण हैं जो आरक्षित हैं नियमित अभिव्यक्तियों में विशेष पात्र। कार्यान्वयन मानता है कि कॉलर पहले स्ट्रिंग से बच जाएगा या केवल तारों को पार करेगा जो तालिका में वर्णों के बिना हैं नियमित अभिव्यक्ति (MDN)।

एमडीएन हमारे तारों से बचने के लिए एक कार्यान्वयन भी प्रदान करता है। यह अच्छा होगा अगर यह भी मानकीकृत किया गया था RegExp.escape(str), लेकिन हां, यह अस्तित्व में नहीं है:

function escapeRegExp(str) {
  return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
}

हम कॉल कर सकते थे escapeRegExp हमारे भीतर String.prototype.replaceAll कार्यान्वयन, हालांकि, मुझे यकीन नहीं है कि यह प्रदर्शन को कितना प्रभावित करेगा (संभावित रूप से उन तारों के लिए भी जिनके लिए बचाना आवश्यक नहीं है, जैसे सभी अल्फान्यूमेरिक स्ट्रिंग्स)।


1635
2017-07-12 01:46



क्या मैं पूछ सकता हूं कि स्ट्रिंग के सभी अवसरों को बदलने के दौरान जी चरित्र क्या है? - jonney
एंड्रॉइड 4.1 पर regexp विधि 15% तेज है, लेकिन आप खोज के लिए अभिव्यक्ति से बच नहीं रहे हैं, इसलिए यह बेंचमार्क अपूर्ण है। - andreszs
इस समाधान के साथ कोई समस्या है, यदि आप खोज स्ट्रिंग में regexp अभिव्यक्ति के विशेष वर्ण शामिल हैं, तो उनका अर्थ समझा जाएगा। मैं @ सैंडी यूनाइटेडवॉल्फ जवाब की सलाह देते हैं। - Thomas Leduc
पहला यह करेगा: 'bla.bla'.replaceAll ('। ',' _ '); "_______"। दूसरा वाला 'bla_bla' करेगा, जो आमतौर पर आप करना चाहते हैं। - RobKohr
उत्तर पर चमक। 5x अधिक वोटों के साथ अगले, "गलत" -मार्क किए गए उत्तर पर जाएं। ये वही है जो आप चाहते हो। - HoldOffHunger


str = str.replace(/abc/g, '');

टिप्पणी के जवाब में:

var find = 'abc';
var re = new RegExp(find, 'g');

str = str.replace(re, '');

के जवाब में उपरोक्त क्लिक करेंटिप्पणी, आप इसे और भी सरल बना सकते हैं:

function replaceAll(str, find, replace) {
    return str.replace(new RegExp(find, 'g'), replace);
}

ध्यान दें: नियमित अभिव्यक्ति में विशेष (मेटा) वर्ण होते हैं, और इस तरह यह तर्क में अंधेरे से गुजरना खतरनाक है find उन पात्रों से बचने के लिए उप-प्रसंस्करण किए बिना उपरोक्त कार्य करें। यह में शामिल है मोज़िला डेवलपर नेटवर्ककी नियमित अभिव्यक्तियों पर जावास्क्रिप्ट गाइड, जहां वे निम्नलिखित उपयोगिता समारोह प्रस्तुत करते हैं:

function escapeRegExp(str) {
    return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
}

तो बनाने के लिए replaceAll() सुरक्षित से ऊपर का कार्य, यदि आप भी शामिल करते हैं तो इसे निम्न में संशोधित किया जा सकता है escapeRegExp:

function replaceAll(str, find, replace) {
    return str.replace(new RegExp(escapeRegExp(find), 'g'), replace);
}

3597
2017-07-17 17:54



अपने स्वयं के 'replaceAll' विधि को लागू किए बिना नियमित रूप से अभिव्यक्ति "बॉक्स से बाहर" को पूरा करने का एकमात्र तरीका है। मैं सिर्फ उनका उपयोग करने के लिए उनके उपयोग का सुझाव नहीं दे रहा हूं। - Sean Bright
यह इस टिप्पणी से मेरा स्वयं का कार्य है: function replaceAll(find, replace,str) { var re = new RegExp(find, 'g'); str = str.replace(re, replace); return str; } - Click Upvote
के प्रमुख चेतावनी replaceAll कार्यान्वयन यह है कि अगर यह काम नहीं करेगा find मेटाएक्टेक्टर शामिल हैं। - Martin Ender
@ सेनब्राइट आप सही हैं। मैंने आपके जावास्क्रिप्ट को एक PHP कोड में इस्तेमाल किया था इसलिए मुझे बचने के लिए एक अतिरिक्त बैकस्लैश जोड़ना पड़ा। पहेली पर आपका कोड सही है। मुझे जांच करनी चाहिए थी। क्षमा याचना jsfiddle.net/7y19xyq8 - Onimusha
@ बेनेट यह है जावास्क्रिप्ट देशी प्रकार के प्रोटोटाइप का विस्तार करने के लिए बुरा अभ्यास। - Emile Bergeron


नोट: वास्तविक कोड में इसका उपयोग न करें।

एक साधारण शाब्दिक स्ट्रिंग के लिए नियमित अभिव्यक्तियों के विकल्प के रूप में, आप इसका उपयोग कर सकते हैं

str = "Test abc test test abc test...".split("abc").join("");

सामान्य पैटर्न है

str.split(search).join(replacement)

यह उपयोग करने से कुछ मामलों में तेजी से होता था replaceAll और एक नियमित अभिव्यक्ति, लेकिन यह आधुनिक ब्राउज़र में अब और मामला प्रतीत नहीं होता है। इसलिए, वास्तविक शब्द में नहीं, नियमित अभिव्यक्ति से बचने की आवश्यकता से बचने के लिए इसे वास्तव में केवल एक त्वरित हैक के रूप में उपयोग किया जाना चाहिए।


1193
2017-07-17 20:29



मुझे आश्चर्य हुआ, क्योंकि मैं इस विधि को अधिक वस्तुओं को आवंटित करने, और अधिक कचरा बनाने की अपेक्षा करता हूं, और इस प्रकार अधिक समय लेता है, लेकिन जब मैंने वास्तव में ब्राउज़र में परीक्षण किया था तो यह विधि स्वीकार्य प्रतिक्रिया से लगातार 20% तेज थी। परिणाम निश्चित रूप से भिन्न हो सकते हैं। - MgSam
मैं खुद उत्सुक था, और इसे स्थापित किया: jsperf.com/replace-all-vs-split-join । ऐसा लगता है कि v8 अन्य जावास्क्रिप्ट इंजन की तुलना में सरणी / जुड़ने वाले सरणी में बस पागल है। - fabi
बहुत अच्छा - विशेष पात्रों में गुजरते समय आपको खराब RegExps की संभावना से भी बचाता है। मैं ऑब्जेक्ट प्रॉपर्टी में "इसे ढूंढें और इसे प्रतिस्थापित करें" के लिए एक सामान्य ध्वज में जोड़ रहा हूं, लेकिन अगर मुझे प्रतिस्थापित करने की आवश्यकता है तो चिंतित था। " या "}" और भूल गया कि मैं 3 महीने बाद RegEx का उपयोग कर रहा था! - tobriand
मेरे आईपैड 2 / सफारी पर, विभाजित / जुड़ना प्रतिस्थापन से 65% धीमा है, इसलिए आपके परिणाम भिन्न हो सकते हैं। - mrk
और स्ट्रिंग.प्रोटोटाइप के रूप में: String.prototype.replaceAll = function(f,r){return this.split(f).join(r);}। उपयोग: "My string".replaceAll('st', ''); "मेरी अंगूठी" पैदा करता है - MacroMan


के साथ एक नियमित अभिव्यक्ति का उपयोग करना g ध्वज सेट सभी को बदल देगा:

someString = 'the cat looks like a cat';
anotherString = someString.replace(/cat/g, 'dog');
// anotherString now contains "the dog looks like a dog"

यहां भी देखें


507
2018-05-06 23:18



मुझे लगता है कि किंडा मूर्खतापूर्ण है, लेकिन जेएस ग्लोबल रेगेक्स एकमात्र तरीका है जो कई प्रतिस्थापन करने का एकमात्र तरीका है। - Mike
अच्छी तरह से तकनीकी रूप से आप लूप कर सकते हैं var sourceText उदाहरणों की संख्या गिनें (numOfInstances) का उपयोग कर substring या विभाजन और लंबाई (अन्य रणनीतियों के बीच) गिनती thatWhichYouWantToReplace फिर करो for (var i = 0; i < numOfInstances; i++){ sourceText = sourceText.replace('thatWhichYouWantToReplace', ''); } या इससे भी आसान बस थोड़ी देर लूप का उपयोग करें (while sourceText.indexOf(thatWhichYouWantToReplace > -1){ sourceText = sourceText.replace(...)) लेकिन मुझे नहीं लगता कि आप इसका उपयोग करते समय ऐसा क्यों करना चाहते हैं /g इतना आसान और शायद अधिक प्रदर्शनकारी है। - Zargold


स्वीकृत उत्तर के आधार पर एक स्ट्रिंग प्रोटोटाइप फ़ंक्शन यहां दिया गया है:

String.prototype.replaceAll = function (find, replace) {
    var str = this;
    return str.replace(new RegExp(find, 'g'), replace);
};

संपादित करें 

अगर आपका find विशेष पात्र होंगे तो आपको उनसे बचने की जरूरत है:

String.prototype.replaceAll = function (find, replace) {
    var str = this;
    return str.replace(new RegExp(find.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), 'g'), replace);
};

बेला: http://jsfiddle.net/cdbzL/


90
2018-02-11 23:03



पर क्या अगर find जैसे अक्षर हैं . या $ रेगेक्स में विशेष अर्थ है? - callum
@callum उस मामले में आपको अपने खोज चर से बचना होगा (उपरोक्त संपादन देखें)। - jesal
उन वस्तुओं को संशोधित न करें जिनके पास आपके स्वामित्व नहीं हैं - Aamir Afridi
जेसल, यह एक स्ट्रिंग प्रतिस्थापन समस्या का एक अद्भुत समाधान है जिसका सामना मैंने किया है, और यह स्पष्ट रूप से जावास्क्रिप्ट में तारों की "अपरिवर्तनीयता" पर विजय प्राप्त करता है। क्या आप या कोई और बता सकता है कि यह प्रोटोटाइप फ़ंक्शन स्ट्रिंग की अपरिवर्तनीयता को कैसे ओवरराइड करता है? इस कर देता है काम; मैं बस इस सहायक सवाल को समझना चाहता हूं। - Tom
@ टॉम: यह नहीं है अपरिवर्तनीयता को बिल्कुल दूर करें: var str = this अपरिवर्तनीय स्ट्रिंग का दूसरा संदर्भ बनाता है, जिसके लिए replace विधि लागू होती है, जो बदले में एक देता है नई अपरिवर्तनीय स्ट्रिंग। ये प्रोटोटाइप फ़ंक्शन एक नई अपरिवर्तनीय स्ट्रिंग लौटाते हैं, यदि नहीं, तो आप लिखने में सक्षम होंगे someStrVar.replaceAll('o', '0'); तथा someStrVar बदल दिया जाएगा। इसके बजाय, आपको लिखना है someStrVar = someStrVar.replaceAll('o', '0'); <- var को पकड़ने के लिए सेट सेट करने के लिए पुन: असाइन करें नई अपरिवर्तनीय स्ट्रिंग। उसके चारों ओर कोई रास्ता नहीं है। कंसोल में आज़माएं: x = 'foobar'; x.replaceAll('o', '0'); x; - Elias Van Ootegem


अद्यतन करें:

यह अपडेट के लिए कुछ देर हो चुकी है, लेकिन चूंकि मैंने इस सवाल पर ठोकर खाई, और देखा कि मेरा पिछला जवाब ऐसा नहीं है जिसे मैं खुश हूं। चूंकि एक शब्द को प्रतिस्थापित करने में शामिल प्रश्न, यह अविश्वसनीय है कि कोई भी शब्द सीमाओं का उपयोग करने के बारे में सोचा नहीं है (\b)

'a cat is not a caterpillar'.replace(/\bcat\b/gi,'dog');
//"a dog is not a caterpillar"

यह एक साधारण रेगेक्स है जो ज्यादातर मामलों में शब्दों के हिस्सों को बदलने से बचाता है। हालांकि, एक डैश - अभी भी एक शब्द सीमा माना जाता है। इसलिए इस मामले में स्ट्रिंग्स को बदलने से बचने के लिए सशर्त उपयोग किया जा सकता है cool-cat:

'a cat is not a cool-cat'.replace(/\bcat\b/gi,'dog');//wrong
//"a dog is not a cool-dog" -- nips
'a cat is not a cool-cat'.replace(/(?:\b([^-]))cat(?:\b([^-]))/gi,'$1dog$2');
//"a dog is not a cool-cat"

मूल रूप से, यह प्रश्न यहां प्रश्न के समान है: जावास्क्रिप्ट "'" के साथ "'" को प्रतिस्थापित करता है

@ माइक, मैंने जो जवाब दिया है उसे जांचें ... regexp एक सबस्किंग की कई घटनाओं को प्रतिस्थापित करने का एकमात्र तरीका नहीं है, इससे दूर। लचीला सोचो, सोचो विभाजित!

var newText = "the cat looks like a cat".split('cat').join('dog');

वैकल्पिक रूप से, शब्द भागों को बदलने से रोकने के लिए - जो अनुमोदित उत्तर भी करेगा! आप नियमित रूप से अभिव्यक्तियों का उपयोग करके इस मुद्दे को प्राप्त कर सकते हैं, मैं स्वीकार करता हूं, कुछ हद तक जटिल और उस के ऊपर की तरह, एक टैड धीमा, भी:

var regText = "the cat looks like a cat".replace(/(?:(^|[^a-z]))(([^a-z]*)(?=cat)cat)(?![a-z])/gi,"$1dog");

आउटपुट स्वीकार किए गए उत्तर के समान है, हालांकि, इस स्ट्रिंग पर / cat / g अभिव्यक्ति का उपयोग करना:

var oops = 'the cat looks like a cat, not a caterpillar or coolcat'.replace(/cat/g,'dog');
//returns "the dog looks like a dog, not a dogerpillar or cooldog" ?? 

ओह वास्तव में, यह शायद आप नहीं चाहते हैं। तब क्या है? आईएमएचओ, एक रेगेक्स जो केवल 'बिल्ली' को सशर्त रूप से बदल देता है। (यानी एक शब्द का हिस्सा नहीं), जैसे:

var caterpillar = 'the cat looks like a cat, not a caterpillar or coolcat'.replace(/(?:(^|[^a-z]))(([^a-z]*)(?=cat)cat)(?![a-z])/gi,"$1dog");
//return "the dog looks like a dog, not a caterpillar or coolcat"

मेरा अनुमान है, यह आपकी जरूरतों को पूरा करता है। यह बिल्कुल पूर्ण नहीं है, लेकिन यह आपको शुरू करने के लिए पर्याप्त होना चाहिए। मैं इन पृष्ठों पर कुछ और पढ़ने की सिफारिश करता हूं। यह आपकी विशिष्ट आवश्यकताओं को पूरा करने के लिए इस अभिव्यक्ति को पूर्ण करने में उपयोगी साबित होगा।

http://www.javascriptkit.com/jsref/regexp.shtml

http://www.regular-expressions.info


अंतिम जोड़:

यह देखते हुए कि इस प्रश्न को अभी भी बहुत सारे विचार मिलते हैं, मैंने सोचा कि मैं इसका एक उदाहरण जोड़ सकता हूं .replace कॉलबैक फ़ंक्शन के साथ उपयोग किया जाता है। इस मामले में, यह अभिव्यक्ति को नाटकीय रूप से सरल बनाता है तथा सही पूंजीकरण के साथ प्रतिस्थापन या दोनों को बदलने की तरह, और भी लचीलापन प्रदान करता है cat तथा cats एक बार में:

'Two cats are not 1 Cat! They\'re just cool-cats, you caterpillar'
   .replace(/(^|.\b)(cat)(s?\b.|$)/gi,function(all,char1,cat,char2)
    {
       //check 1st, capitalize if required
       var replacement = (cat.charAt(0) === 'C' ? 'D' : 'd') + 'og';
       if (char1 === ' ' && char2 === 's')
       {//replace plurals, too
           cat = replacement + 's';
       }
       else
       {//do not replace if dashes are matched
           cat = char1 === '-' || char2 === '-' ? cat : replacement;
       }
       return char1 + cat + char2;//return replacement string
    });
//returns:
//Two dogs are not 1 Dog! They're just cool-cats, you caterpillar

75
2018-03-01 10:02



मुझे लगता है कि अतिरिक्त दिलचस्प हिस्सा नीचे रखा जाना चाहिए। पीएस .: मैंने अभी देखा है कि पहली पंक्ति का आधा क्षेत्र से बाहर है, मुझे इसे ठीक करने की अनुमति दें!


एक वैश्विक नियमित अभिव्यक्ति के खिलाफ मैच:

anotherString = someString.replace(/cat/g, 'dog');

45
2018-05-06 23:23





str = str.replace(/abc/g, '');

या यहां से सभी फ़ंक्शन को प्रतिस्थापित करने का प्रयास करें:

उपयोगी जावास्क्रिप्ट विधियां क्या हैं जो अंतर्निहित वस्तुओं को बढ़ाती हैं?

str = str.replaceAll('abc', ''); OR

var search = 'abc';
str = str.replaceAll(search, '');

संपादित करें: प्रतिस्थापन के बारे में स्पष्टीकरण सभी उपलब्धता

स्ट्रिंग के प्रोटोटाइप में 'replaceAll' विधि जोड़ दी गई है। इसका मतलब है कि यह सभी स्ट्रिंग ऑब्जेक्ट्स / लिटरल्स के लिए उपलब्ध होगा।

जैसे

var output = "test this".replaceAll('this', 'that');  //output is 'test that'.
output = output.replaceAll('that', 'this'); //output is 'test this'

35
2017-07-17 17:55



क्या आप प्रोटोटाइप का उपयोग न करने वाले लोगों के लिए replaceAll () फ़ंक्शन को फिर से लिख सकते हैं? - Click Upvote
@ क्लिक करें उपरोक्त .... आप प्रोटोटाइप का उपयोग कर रहे हैं, यह सभी जेएस वस्तुओं का हिस्सा है। मुझे लगता है कि आप जेएस पुस्तकालय prototype.js के बारे में सोच रहे हैं। - seth
सेठ, थोड़ा सुधार। यदि आप प्रोटोटाइप में विधि जोड़ते हैं, तो यह उस प्रकार की सभी वस्तुओं के लिए उपलब्ध है। ReplceAll विधि स्ट्रिंग प्रोटोटाइप में जोड़ा गया था और इसे सभी स्ट्रिंग ऑब्जेक्ट्स के लिए काम करना चाहिए। - SolutionYogi
@solutionyogi - हाँ, मैंने प्रोटोटाइप (सही ढंग से) पहले इस्तेमाल किया है। मैं बस "प्रोटोटाइप का उपयोग नहीं कर रहा" के बारे में ओपी की टिप्पणी को संबोधित कर रहा था जिसे मैंने प्रोटोटाइप.जेएस (शायद गलत तरीके से) का मतलब माना था। मुझे "प्रोटोटाइप" कहा जाना चाहिए था क्योंकि मैं कहने की कोशिश कर रहा था कि जावास्क्रिप्ट ऑब्जेक्ट्स में प्रोटोटाइप है। इस प्रकार, ओपी पहले से ही "अप्रत्यक्ष" तरीके से प्रोटोटाइप का उपयोग कर रहा था। यहां पर उपयोग करने के लिए अप्रत्यक्ष गलत शब्द हो सकता है लेकिन मैं थका हुआ हूं, इसलिए मैं दूपा हूं। - seth


मान लें कि आप 'एक्स' के साथ सभी 'एबीसी' को प्रतिस्थापित करना चाहते हैं:

let some_str = 'abc def def lom abc abc def'.split('abc').join('x')
console.log(some_str) //x def def lom x x def

मैं स्ट्रिंग प्रोटोटाइप को संशोधित करने से कुछ और सरल के बारे में सोचने की कोशिश कर रहा था।


29
2017-09-10 14:59



सरल, आसान, और शायद सबसे अधिक प्रदर्शन विकल्प: अच्छा जवाब। - machineghost
मुझे नहीं पता कि यह प्रदर्शन-वार है, लेकिन .... यह काम करता है। - Emilio Grisolía
दरअसल, जब मैंने इसे व्यक्तिगत रूप से मीट्रिक-एड नहीं किया है, तो विभाजन / जुड़ना आमतौर पर एक बहुत ही सक्षम समाधान होता है। - machineghost
यह क्रोम में भी है, फ़ायरफ़ॉक्स पर 100% तेज है, और आईई पर 50% धीमी है ...: jsperf.com/replace-regex-split-join - Olivier