জাভাস্ক্রিপ্টে টেক্সটটি প্রতিস্থাপন করে আমি কীভাবে জাভাস্ক্রিপ্টে একটি 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
অদ্ভুত কেউ লক্ষ্য str_replaceকরেনি যে পিএইচপি'র একই দৈর্ঘ্যের দুটি অ্যারে গ্রহণ করা হয়, যেখানে প্রথম অ্যারেতে প্রতিটি স্ট্রিং একই সূচীতে দ্বিতীয় অ্যারে স্ট্রিংয়ের সাথে প্রতিস্থাপিত হয়। আমি এখনও অবধি খুঁজে পাওয়া একমাত্র সঠিক ফাংশনের জন্য দয়া করে stackoverflow.com/a/5069776/296430 দেখুন যা জাভাস্ক্রিপ্টে এই সঠিক আচরণটিকে নকল করে।
জুলে Colle,

2
@JulesColle যে উত্তর প্রায়ই ব্যর্থ হয় - দেখুন কেন / যখন এটি ব্যর্থ হয় এবং এখানে একটি ভাল সমাধান: stackoverflow.com/a/37949642/445295
স্টিফেন এম হ্যারিস

1
আপনি যদি পিএইচপি সংস্করণ সহ কোয়ার্ক সহ - উচ্চতর সামঞ্জস্যতা চান ... github.com/kvz/locutus/blob/master/src/php/strings/…
ডগ কোবার্ন

উত্তর:


12

স্ট্রিং প্রতিস্থাপনের জন্য রেজেক্স ব্যবহার স্ট্রিং রিপ্লেসম ব্যবহারের চেয়ে উল্লেখযোগ্যভাবে ধীর। জেএসপিআইপি-তে
প্রদর্শিত হিসাবে , আপনি একটি রেইগেক্স তৈরির জন্য বিভিন্ন স্তরের দক্ষতা রাখতে পারেন, তবে এগুলি সমস্ত সাধারণ স্ট্রিং প্রতিস্থাপনের তুলনায় উল্লেখযোগ্যভাবে ধীর হয়। রেজেক্স ধীর কারণ :

ফিক্সড স্ট্রিং ম্যাচে ব্যাকট্র্যাকিং, সংকলন পদক্ষেপ, ব্যাপ্তি, অক্ষর শ্রেণি বা নিয়মিত এক্সপ্রেশন ইঞ্জিনকে ধীর করে দেয় এমন অন্যান্য বৈশিষ্ট্যগুলির একটি হোস্ট নেই। রেগেক্স ম্যাচগুলিকে অপ্টিমাইজ করার উপায় অবশ্যই আছে তবে আমি মনে করি সাধারণ ক্ষেত্রে সূচকে কোনও স্ট্রিংয়ে পরাজিত করার সম্ভাবনা কম।

জেএস পারফেক্ট পৃষ্ঠায় একটি সহজ পরীক্ষার জন্য, আমি কয়েকটি ফলাফল নথিভুক্ত করেছি:

<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>

ক্রোম 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
স্ট্রিং.রেপ্লেস ('পুরাতন', 'নতুন') কেবল স্ট্রিংয়ের মধ্যে 'পুরানো' এর প্রথম উদাহরণটি প্রতিস্থাপন করবে। রিয়েলমেগ 777 এর উত্তরের মতো 'জি' পতাকা সহ একটি নিয়মিত অভিব্যক্তি ব্যবহার স্ট্রিংয়ের সমস্ত উদাহরণ প্রতিস্থাপন করবে। পাঠ্য = পাঠ্য.রেজ (/ পুরাতন / ছ, 'নতুন') 'পুরানো' এর সমস্ত দৃষ্টান্ত প্রতিস্থাপন করবে
ডব্লিউএনরোজেনবার্গ

1
মামলা-সংবেদনশীল না হলে কীভাবে?
নেটোরিকা

7
^ টেক্সট.রেপ্লেস (/ পুরাতন / জিআই, 'নতুন') 'নতুন' কেস-সংবেদনশীল নয় (যেমন 'ওল্ড' এবং 'ওএলডি' পাশাপাশি প্রতিস্থাপন করা হবে) 'এর জন্য' পুরানো 'এর সমস্ত দৃষ্টান্ত প্রতিস্থাপন করবে)
আর্নৌধজ


84

আরও সহজভাবে:

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

'_' দিয়ে সমস্ত স্পেস প্রতিস্থাপন করে!


10
এটি "str_replace" (বিশ্বব্যাপী) কী করে তার আরও সঠিক অনুবাদ। নির্বাচিত উত্তর কেবল প্রথম উদাহরণটি প্রতিস্থাপন করবে।
ধনী

1
চরিত্রগুলি পালাতে ভুলবেন না, বিশেষত আপনি যদি হেক্স পালিয়ে গিয়ে প্রতিস্থাপন করছেন: \ .replace(/\\x3B/g,';')
x27

18

এই সমস্ত পদ্ধতিগুলি মূল মানটি পরিবর্তন করে না, নতুন স্ট্রিং দেয়।

var city_name = 'Some text with spaces';

_ এর সাথে প্রথম স্থান প্রতিস্থাপন করে

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

রেগেক্স ব্যবহার করে _ দিয়ে সমস্ত স্পেস প্রতিস্থাপন করে। আপনার যদি রেজেক্স ব্যবহার করতে হয় তবে আমি https://regex101.com/ দিয়ে এটি পরীক্ষা করার পরামর্শ দিচ্ছি

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

রেজিক্স ছাড়াই _ দিয়ে সমস্ত স্পেস প্রতিস্থাপন করে । কার্যকরী উপায়।

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

অন্যরা আপনাকে যে কোড দিচ্ছে তা কেবল একটি ঘটনাকেই প্রতিস্থাপন করে, নিয়মিত এক্সপ্রেশন ব্যবহার করে সেগুলি সবগুলি প্রতিস্থাপন করে (যেমন @ সোরজিট বলেছিলেন)। সমস্ত "চান" "" চাই না "এর সাথে প্রতিস্থাপন করতে আমাদের এই কোডটি দিন:

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" হওয়ার ফলে "এটি এমন কিছু নমুনা পাঠ যা আমি প্রতিস্থাপন করতে চাই না" in

নিয়মিত প্রকাশের জন্য একটি দ্রুত গাইড পেতে, এখানে যান:
http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/
সম্পর্কে আরও জানতে str.replace(), এখানে যান:
https://developer.mozilla.org/ en-US / ডকস / জাভাস্ক্রিপ্ট / রেফারেন্স / গ্লোবাল_অবজেক্টস / স্ট্রিং / প্রতিস্থাপন
সৌভাগ্য!


14

এই ফাংশনটি কেবল একটি ঘটনাকে প্রতিস্থাপন করে .. আপনার যদি একাধিক ঘটনা প্রতিস্থাপন করতে হয় তবে এই ফাংশনটি আপনার ব্যবহার করা উচিত: http://phpjs.org/funitions/str_re جگہ : 527

অগত্যা। হান্স কাস্টিংয়ের উত্তরটি দেখুন:

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

8

এইচএম .. আপনি () প্রতিস্থাপন চেক করেছেন?

আপনার কোডটি এর মতো দেখাবে

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

দ্রষ্টব্য যে আপনি নিয়মিত প্রকাশের প্যাটার্নগুলি কোটগুলিতে মুড়ে রাখছেন না যা এটি স্ট্রিংটিকে রেজিএক্সপ্স অবজেক্ট নয়। কেস সংবেদনশীল প্রতিস্থাপনের জন্য আপনাকে অতিরিক্ত পতাকা সরবরাহ করতে হবে 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
আপনিই একমাত্র যিনি ভিতরে থাকা ফাংশনটির
সক্ষমতাটি

4

তুমি ব্যবহার করতে পার

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

এবং একবারে একটি স্ট্রিংয়ের একাধিক মান পরিবর্তন করতে উদাহরণস্বরূপ # স্ট্রিং ভি এবং _ স্ট্রিং ডাব্লুতে পরিবর্তন করতে:

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

3

আপনি যদি সত্যিই পিএইচপি এর সমতুল্য চান তবে আপনি লোকটাসstr_replace ব্যবহার করতে পারেন । পিএইচপি এর সংস্করণ সমর্থন আরও বিকল্প তারপর জাভাস্ক্রিপ্ট সমর্থন করে। উদাহরণস্বরূপ ট্যাগ: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()এবং এর চেয়ে দ্রুত isregex

নীচে কাজ উদাহরণ:

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

আপনি যদি রেজেক্স ব্যবহার করতে না চান তবে আপনি এই ফাংশনটি ব্যবহার করতে পারেন যা সমস্তগুলিকে স্ট্রিংয়ে প্রতিস্থাপন করবে

সোর্স কোড:

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);

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.