मैं जावास्क्रिप्ट में पाठ की जगह, जावास्क्रिप्ट में str_replace कैसे प्रदर्शन कर सकता हूं?


137

मैं str_replaceजावास्क्रिप्ट में कुछ पाठ को बदलने के लिए या इसके समान विकल्प का उपयोग करना चाहता हूं ।

var text = "this is some sample text that i want to replace";
var new_text = replace_in_javascript("want", "dont want", text);
document.write("new_text");

देना चाहिये

this is some sample text that i dont want to replace

यदि आप रेगेक्स करने जा रहे हैं, तो अंतर्निहित प्रतिस्थापन विधियों की तुलना में प्रदर्शन के निहितार्थ क्या हैं।


3
अजीब किसी ने नहीं देखा कि PHP str_replaceभी एक ही लंबाई के दो सरणियों को स्वीकार करता है, जहां पहले सरणी में प्रत्येक स्ट्रिंग को उसी सूचकांक पर दूसरे सरणी में स्ट्रिंग के साथ बदल दिया जाता है। कृपया मुझे अभी तक मिले एकमात्र सही फ़ंक्शन के लिए stackoverflow.com/a/5069776/296430 देखें , जो कि जावास्क्रिप्ट में इस सटीक व्यवहार की नकल करता है।
जूल्स कॉल

2
@JulesColle वह उत्तर अक्सर विफल हो जाता है - देखें कि क्यों / कब विफल होता है और यहां एक बेहतर समाधान: stackoverflow.com/a/37949642/445295
स्टीफन एम। हैरिस

1
यदि आप उच्च संगतता चाहते हैं - quirks सहित - php संस्करण के साथ ... github.com/kvz/locutus/blob/master/src/php/strings/…
डॉग कोबर्न

जवाबों:


12

स्ट्रिंग रिप्लेसमेंट के लिए रेगेक्स का उपयोग स्ट्रिंग रिप्लेसमेंट की तुलना में काफी धीमा है।
जैसा कि JSPerf पर प्रदर्शित किया गया है , आपके पास regex बनाने के लिए दक्षता के विभिन्न स्तर हो सकते हैं, लेकिन उनमें से सभी एक साधारण स्ट्रिंग की तुलना में काफी धीमी हैं। रेगेक्स धीमा है क्योंकि :

फिक्स्ड-स्ट्रिंग मैचों में बैकट्रैकिंग, संकलन स्टेप्स, रेंज, कैरेक्टर क्लासेस, या अन्य फीचर्स का होस्ट नहीं होता है जो रेगुलर एक्सप्रेशन इंजन को धीमा कर देते हैं। रेगेक्स मैचों को अनुकूलित करने के तरीके निश्चित रूप से हैं, लेकिन मुझे लगता है कि यह सामान्य मामले में एक स्ट्रिंग में अनुक्रमण को हरा देने की संभावना नहीं है।

JS perf page पर एक सरल परीक्षण चलाने के लिए, मैंने कुछ परिणामों का दस्तावेजीकरण किया है:

<script>
// Setup
  var startString = "xxxxxxxxxabcxxxxxxabcxx";
  var endStringRegEx = undefined;
  var endStringString = undefined;
  var endStringRegExNewStr = undefined;
  var endStringRegExNew = undefined;
  var endStringStoredRegEx = undefined;      
  var re = new RegExp("abc", "g");
</script>

<script>
// Tests
  endStringRegEx = startString.replace(/abc/g, "def") // Regex
  endStringString = startString.replace("abc", "def", "g") // String
  endStringRegExNewStr = startString.replace(new RegExp("abc", "g"), "def"); // New Regex String
  endStringRegExNew = startString.replace(new RegExp(/abc/g), "def"); // New Regexp
  endStringStoredRegEx = startString.replace(re, "def") // saved regex
</script>

Chrome 68 के परिणाम निम्नानुसार हैं:

String replace:    9,936,093 operations/sec
Saved regex:       5,725,506 operations/sec
Regex:             5,529,504 operations/sec
New Regex String:  3,571,180 operations/sec
New Regex:         3,224,919 operations/sec

इस उत्तर की पूर्णता (टिप्पणियों से उधार लेना) के संदर्भ में, यह ध्यान देने योग्य है कि .replaceकेवल मिलान किए गए वर्ण का पहला उदाहरण बदलता है। इसके सभी उदाहरणों को बदलना संभव है //g। कई उदाहरणों name.replace(' ', '_').replace(' ', '_').replace(' ', '_');या बदतर की जगह प्रदर्शन व्यापार बंद और कोड लालित्य को बदतर होने का तर्क दिया जा सकता हैwhile (name.includes(' ')) { name = name.replace(' ', '_') }


यह दिलचस्प है और समझ में आता है कि शुद्ध स्ट्रिंग रिप्लेक्स की तुलना में तेज है। यह शायद ध्यान देने योग्य है (जैसे कुछ उत्तरों में) जो .replaceकेवल मिलान किए गए चरित्र के पहले उदाहरण को बदल देता है। इसके सभी उदाहरणों को बदलना संभव है //g। प्रदर्शन व्यापार बंद है, तो कई उदाहरण की जगह और भी खराब होने का तर्क किया जा सकता है name.replace(' ', '_').replace(' ', '_').replace(' ', '_');या बुराwhile (name.includes(' ')) { name = name.replace(' ', '_') }
लेक्स

201

आप replaceविधि का उपयोग करेंगे :

text = text.replace('old', 'new');

पहला तर्क वह है जो आप देख रहे हैं, जाहिर है। इसे नियमित अभिव्यक्ति भी स्वीकार कर सकती है।

बस याद रखें कि यह मूल स्ट्रिंग को नहीं बदलता है। यह केवल नया मान लौटाता है।


4
'यह केवल लौटता है और बदलता नहीं है' के लिए बहुत बहुत धन्यवाद! जब तक मैं आपकी टिप्पणी पर आया तब तक मैं अपने बालों को बहुत समय तक फाड़ता रहा ...
आदित्य एमपी

70
string.replace ('पुराना', 'नया') केवल स्ट्रिंग में 'पुराने' के पहले उदाहरण को प्रतिस्थापित करेगा। Realmag777 के उत्तर में 'g' ध्वज के साथ एक नियमित अभिव्यक्ति का उपयोग करना स्ट्रिंग के सभी उदाहरणों को बदल देगा। पाठ = text.replace (/ पुराना / जी, 'नया') 'पुराने' के सभी उदाहरणों को बदल देगा
WNRosenberg

1
कैसे मामले के प्रति संवेदनशील नहीं है?
नेटोरिका

7
^ text.replace (/ पुराना / gi, 'नया') 'पुराने' के सभी उदाहरणों को 'new' के लिए केस-संवेदी नहीं होगा (जैसे 'OLD' और 'oLd' को भी बदला जाएगा)
arnoudhzz

2
और उसके साथ कुछ डॉक्स: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
इलाड सिल्वर

84

अधिक केवल:

city_name=city_name.replace(/ /gi,'_');

सभी जगहों को '_' से बदल देता है!


10
यह "str_replace" क्या करता है (वैश्विक) का अधिक सटीक अनुवाद है। चुना गया उत्तर केवल पहले उदाहरण को बदल देगा।
आरआईसीएच

1
पात्रों से बचने के लिए मत भूलना, खासकर यदि आप हेक्स की जगह ले रहे हैं तो बच गए: उदाहरण के लिए \ x27 होगा.replace(/\\x3B/g,';')
dmayo

18

ये सभी विधियां मूल मूल्य को संशोधित नहीं करती हैं, नए तार लौटाती हैं।

var city_name = 'Some text with spaces';

_ के साथ 1 स्थान बदलता है

city_name.replace(' ', '_'); // Returns: Some_text with spaces

रेगेक्स का उपयोग करके _ के साथ सभी रिक्त स्थान को बदल देता है । यदि आपको regex का उपयोग करने की आवश्यकता है, तो मैं इसे https://regex101.com/ से जांचने की सलाह देता हूं

city_name.replace(/ /gi,'_');  // Returns: Some_text_with_spaces 

बदलता है सभी रिक्त स्थान _ साथ regex के बिना । क्रियात्मक तरीका।

city_name.split(' ').join('_');  // Returns: Some_text_with_spaces

16

आपको कुछ इस तरह लिखना चाहिए:

var text = "this is some sample text that i want to replace";
var new_text = text.replace("want", "dont want");
document.write(new_text);

14

जो कोड आप दूसरों को दे रहे हैं वह केवल एक घटना को प्रतिस्थापित करता है, जबकि नियमित अभिव्यक्ति का उपयोग उन सभी को बदल देता है (जैसे @sorgit ने कहा)। "नहीं चाहते" के साथ सभी "चाहते" को बदलने के लिए, हमें यह कोड:

var text = "this is some sample text that i want to replace";
var new_text = text.replace(/want/g, "dont want");
document.write(new_text);

चर "new_text" होने के परिणामस्वरूप "यह कुछ नमूना पाठ है जिसे मैं बदलना नहीं चाहता"।

नियमित अभिव्यक्ति के लिए एक त्वरित गाइड प्राप्त करने के लिए, यहां
जाएं : http://www.cheatography.com/davechild/cheat-sheets/ अनियमित-expressions /
इसके बारे में और जानने के लिए str.replace(), यहां
जाएं : https://developer.mozilla.org/ en-US / डॉक्स / जावास्क्रिप्ट / संदर्भ / Global_Objects / स्ट्रिंग / बदलें
सौभाग्य!


14

यह फ़ंक्शन केवल एक घटना की जगह लेता है .. यदि आपको कई घटनाओं को बदलने की आवश्यकता है, तो आपको इस फ़ंक्शन को आज़माना चाहिए: http://phpjs.org/functions/str_replace/27

जरुरी नहीं। हंस केस्टिंग जवाब देखें:

city_name = city_name.replace(/ /gi,'_');

8

hm .. क्या आपने प्रतिस्थापित () की जाँच की?

आपका कोड इस तरह दिखाई देगा

var text = "this is some sample text that i want to replace";
var new_text = text.replace("want", "dont want");
document.write(new_text);


7

जावास्क्रिप्ट में, आप replaceस्ट्रिंग ऑब्जेक्ट पर विधि कहते हैं , उदाहरण के लिए "this is some sample text that i want to replace".replace("want", "dont want"), जो बदले हुए स्ट्रिंग को लौटाएगा।

var text = "this is some sample text that i want to replace";
var new_text = text.replace("want", "dont want"); // new_text now stores the replaced string, leaving the original untouched

7

जावास्क्रिप्ट में replace()सब्सट्रेट को बदलने के लिए स्ट्रिंग ऑब्जेक्ट की विधि है। इस पद्धति के दो तर्क हो सकते हैं। पहला तर्क एक स्ट्रिंग या एक नियमित अभिव्यक्ति पैटर्न (regExp ऑब्जेक्ट) हो सकता है और दूसरा तर्क एक स्ट्रिंग या एक फ़ंक्शन हो सकता है। replace()दोनों स्ट्रिंग तर्क रखने की विधि का एक उदाहरण नीचे दिखाया गया है।

var text = 'one, two, three, one, five, one';
var new_text = text.replace('one', 'ten');
console.log(new_text)  //ten, two, three, one, five, one

ध्यान दें कि यदि पहला तर्क स्ट्रिंग है, तो केवल प्रतिस्थापन की पहली घटना को ऊपर के उदाहरण में बदल दिया गया है। प्रतिस्थापन की सभी घटनाओं को बदलने के लिए आपको एक के साथ एक नियमित अभिव्यक्ति प्रदान करने की आवश्यकता हैg (वैश्विक) ध्वज के । यदि आप वैश्विक ध्वज प्रदान नहीं करते हैं, तो विकल्प की केवल पहली घटना को प्रतिस्थापित किया जाएगा भले ही आप पहले तर्क के रूप में नियमित अभिव्यक्ति प्रदान करें। तो आइए oneउपरोक्त उदाहरण में सभी घटनाओं को प्रतिस्थापित करते हैं।

var text = 'one, two, three, one, five, one';
var new_text = text.replace(/one/g, 'ten');
console.log(new_text)  //ten, two, three, ten, five, ten

ध्यान दें कि आप उद्धरणों में नियमित अभिव्यक्ति पैटर्न को नहीं लपेटते हैं जो इसे एक स्ट्रिंग नहीं एक regExp ऑब्जेक्ट बना देगा। एक मामले को असंवेदनशील प्रतिस्थापन करने के लिए आपको अतिरिक्त ध्वज प्रदान करने की आवश्यकता हैi जो पैटर्न केस-असंवेदनशील बनाता है। उस मामले में उपरोक्त नियमित अभिव्यक्ति होगी /one/gi। ध्यान देंi झंडा यहां जोड़ा गया है।

यदि दूसरे तर्क में एक फ़ंक्शन है और यदि कोई मैच है तो फ़ंक्शन तीन तर्कों के साथ पारित किया जाता है। फ़ंक्शन को मिलने वाले तर्क मैच, मैच की स्थिति और मूल पाठ हैं। आपको उस मैच को वापस करने की आवश्यकता है जिसे उस मैच से बदल दिया जाना चाहिए। उदाहरण के लिए,

var text = 'one, two, three, one, five, one';
var new_text = text.replace(/one/g, function(match, pos, text){
return 'ten';
});
console.log(new_text) //ten, two, three, ten, five, ten

आप दूसरे तर्क के रूप में एक फ़ंक्शन का उपयोग करके प्रतिस्थापन पाठ पर अधिक नियंत्रण रख सकते हैं।


2
आप एकमात्र ऐसे व्यक्ति हैं जो कार्य क्षमता के अंदर कार्य का उल्लेख करते हैं
एमियस ज़ूल 7'18

4

आप उपयोग कर सकते हैं

text.replace('old', 'new')

और एक ही बार में एक स्ट्रिंग में कई मान बदलने के लिए, उदाहरण के लिए # को स्ट्रिंग v और _ से स्ट्रिंग w में बदलने के लिए:

text.replace(/#|_/g,function(match) {return (match=="#")? v: w;});

3

यदि आप वास्तव में PHP के बराबर चाहते हैं तो आप Locutus काstr_replace उपयोग कर सकते हैं । PHP का संस्करण अधिक विकल्प का समर्थन करता है और फिर जावास्क्रिप्ट समर्थन करता है। उदाहरण के लिए टैग:str_replaceString.prototype.replace

//PHP
$bodytag = str_replace("%body%", "black", "<body text='%body%'>");
//JS with Locutus
var $bodytag = str_replace(['{body}', 'black', '<body text='{body}'>')  

या सरणी है

//PHP
$vowels = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U");
$onlyconsonants = str_replace($vowels, "", "Hello World of PHP");
//JS with Locutus
var $vowels = ["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"];
var $onlyconsonants = str_replace($vowels, "", "Hello World of PHP");

इसके अलावा यह लूप के बजाय रेगेक्स का उपयोग नहीं करता है। यदि आप रेगेक्स का उपयोग नहीं करना चाहते हैं, लेकिन साधारण स्ट्रिंग को बदलना चाहते हैं, तो आप कुछ इस तरह से उपयोग कर सकते हैं (लोक्टस पर आधारित)

function str_replace (search, replace, subject) {

  var i = 0
  var j = 0
  var temp = ''
  var repl = ''
  var sl = 0
  var fl = 0
  var f = [].concat(search)
  var r = [].concat(replace)
  var s = subject
  s = [].concat(s)

  for (i = 0, sl = s.length; i < sl; i++) {
    if (s[i] === '') {
      continue
    }
    for (j = 0, fl = f.length; j < fl; j++) {
      temp = s[i] + ''
      repl = r[0]
      s[i] = (temp).split(f[j]).join(repl)
      if (typeof countObj !== 'undefined') {
        countObj.value += ((temp.split(f[j])).length - 1)
      }
    }
  }
  return s[0]
}
var text = "this is some sample text that i want to replace";

var new_text = str_replace ("want", "dont want", text)
document.write(new_text)

अधिक जानकारी के लिए स्रोत कोड https://github.com/kvz/locutus/blob/master/src/php/strings/str_replace.js देखें


2

वहां पहले से ही उपयोग कर कई जवाब हैं str.replace () (जो इस प्रश्न के लिए निष्पक्ष पर्याप्त है) और regex, लेकिन आप के संयोजन का उपयोग कर सकते str.split () और शामिल होने के () की तुलना में एक साथ है जो तेजी से str.replace()औरregex

नीचे काम कर रहा है उदाहरण:

var text = "this is some sample text that i want to replace";

console.log(text.split("want").join("dont want"));


2

आपके पास निम्नलिखित विकल्प हैं:

  1. पहली घटना को बदलें

var text = "this is some sample text that i want to replace and this i WANT to replace as well.";
var new_text = text.replace('want', 'dont want');
// new_text is "this is some sample text that i dont want to replace and this i WANT to replace as well"
console.log(new_text)

  1. सभी घटनाओं को बदलें - संवेदनशील मामला

var text = "this is some sample text that i want to replace and this i WANT to replace as well.";
var new_text = text.replace(/want/g, 'dont want');
// new_text is "this is some sample text that i dont want to replace and this i WANT to replace as well
console.log(new_text)

  1. सभी घटनाओं को बदलें - केस असंवेदनशील

var text = "this is some sample text that i want to replace and this i WANT to replace as well.";
var new_text = text.replace(/want/gi, 'dont want');
// new_text is "this is some sample text that i dont want to replace and this i dont want to replace as well
console.log(new_text)

अधिक जानकारी -> यहाँ


2

जावास्क्रिप्ट में, की जगह समारोह नए के साथ दिए गए स्ट्रिंग से उप-स्ट्रिंग को बदलने के लिए उपलब्ध है। उपयोग:

var text = "this is some sample text that i want to replace";
var new_text = text.replace("want", "dont want");
console.log(new_text);

आप इस फ़ंक्शन के साथ नियमित अभिव्यक्ति का उपयोग भी कर सकते हैं। उदाहरण के लिए, अगर चाहते हैं की सभी घटनाओं को बदलने के लिए ,के साथ .

var text = "123,123,123";
var new_text = text.replace(/,/g, ".");
console.log(new_text);

यहाँ gसंशोधक विश्व स्तर पर सभी उपलब्ध मैचों का मिलान करते थे।


2

replace substring in a sentenceप्रतिक्रिया का उपयोग करने की विधि :

 const replace_in_javascript = (oldSubStr, newSubStr, sentence) => {
    let newStr = "";
    let i = 0;
    sentence.split(" ").forEach(obj => {
      if (obj.toUpperCase() === oldSubStr.toUpperCase()) {
        newStr = i === 0 ? newSubStr : newStr + " " + newSubStr;
        i = i + 1;
      } else {
        newStr = i === 0 ? obj : newStr + " " + obj;
        i = i + 1;
      }
    });
    return newStr;
  };

RunMethodHere


2

यदि आप regex का उपयोग नहीं करना चाहते हैं तो आप इस फ़ंक्शन का उपयोग कर सकते हैं जो सभी को एक स्ट्रिंग में बदल देगा

सोर्स कोड:

function ReplaceAll(mystring, search_word, replace_with) 
{
    while (mystring.includes(search_word))
    {
        mystring = mystring.replace(search_word, replace_with);
    }

    return mystring;  
}

कैसे इस्तेमाल करे:

var mystring = ReplaceAll("Test Test", "Test", "Hello"); 

2

जेएस का उपयोग करें String.prototype.replaceपहला तर्क रेगेक्स पैटर्न या स्ट्रिंग होना चाहिए और दूसरा तर्क स्ट्रिंग या फ़ंक्शन होना चाहिए।

str.replace(regexp|substr, newSubStr|function);

उदाहरण के लिए:

var str = 'this is some sample text that i want to replace'; var newstr = str.replace(/want/i, "dont't want"); document.write(newstr); // this is some sample text that i don't want to replace


0
function str_replace($old, $new, $text)
{
   return ($text+"").split($old).join($new); 
}

आपको अतिरिक्त पुस्तकालयों की आवश्यकता नहीं है।


-1

एक ऐसा तरीका जोड़ा replace_in_javascriptजो आपकी आवश्यकता को पूरा करे। यह भी पाया गया है कि आप एक स्ट्रिंग लिख रहे हैं "new_text"में document.write()जो एक चर का उल्लेख माना जाता है new_text

let replace_in_javascript= (replaceble, replaceTo, text) => {
  return text.replace(replaceble, replaceTo)
}

var text = "this is some sample text that i want to replace";
var new_text = replace_in_javascript("want", "dont want", text);
document.write(new_text);

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