আমি জাভাস্ক্রিপ্ট ব্যবহার করে কোনও স্ট্রিং থেকে একটি চরিত্রকে কীভাবে সরিয়ে ফেলতে পারি?


361

আমি এটি পাওয়ার খুব কাছাকাছি, তবে এটি ঠিক ঠিক নয়। আমি যা করতে চাই তা হ'ল rস্ট্রিং থেকে চরিত্রটি সরিয়ে ফেলা । সমস্যাটি হচ্ছে, rস্ট্রিংয়ের একাধিক উদাহরণ রয়েছে । যাইহোক, এটি সর্বদা 4 ইনডেক্সের অক্ষর (তাই 5 তম অক্ষর)।

উদাহরণ স্ট্রিং: crt/r2002_2

আমি যা চাই: crt/2002_2

এই প্রতিস্থাপন ফাংশন উভয় সরান r

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

উত্পাদন: ct/2002_2

আমি এই ফাংশনটি চেষ্টা করেছিলাম:

String.prototype.replaceAt = function (index, char) {
    return this.substr(0, index) + char + this.substr(index + char.length);
}
mystring.replaceAt(4, '')

এটি কেবল তখনই কাজ করে যদি আমি এটি অন্য চরিত্রের সাথে প্রতিস্থাপন করি। এটি কেবল এটি সরাবে না।

কোন চিন্তা?


এখানে সমস্যা কী, "আর" -কে সমস্ত সরানো হয়েছিল তাই না?
ভ্লাদিমির দেশপোটোভিচ

উত্তর:


474
var mystring = "crt/r2002_2";
mystring = mystring.replace('/r','/');

প্রতিস্থাপন করবে /rসঙ্গে /ব্যবহার String.prototype.replace

বিকল্পভাবে আপনি সমস্ত উপস্থিতিগুলির সাথে প্রতিস্থাপন করতে বিশ্বব্যাপী পতাকা দিয়ে রেগেক্স ব্যবহার করতে পারেন ( নীচে এরিক রেপেন এবং সাগর গালার পরামর্শ অনুসারে )

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

সম্পাদনা: যেহেতু প্রত্যেকেরই এখানে এত মজা আছে এবং ব্যবহারকারী 1293504 স্পষ্ট করে দেওয়া প্রশ্নের উত্তর দিতে খুব শীঘ্রই আর ফিরে আসবে বলে মনে হচ্ছে না, এনআরটি চরিত্রটিকে স্ট্রিং থেকে সরানোর জন্য এখানে একটি পদ্ধতি রয়েছে:

String.prototype.removeCharAt = function (i) {
    var tmp = this.split(''); // convert to an array
    tmp.splice(i - 1 , 1); // remove 1 element from the array (adjusting for non-zero-indexed counts)
    return tmp.join(''); // reconstruct the string
}

console.log("crt/r2002_2".removeCharAt(4));

যেহেতু ব্যবহারকারীর 1293504 শূন্য-সূচকযুক্ত গণনার পরিবর্তে সাধারণ গণনাটি ব্যবহার করেছে, তাই আমরা সূচক থেকে 1 মুছে ফেলতে পেরেছি, যদি আপনি charAtএটি তৃতীয় লাইনের সূচক থেকে 1 কে বিয়োগ করে না এবং এর tmp.splice(i, 1)পরিবর্তে ব্যবহার করতে চান তবে এটি ব্যবহার করতে চান ।


3
চতুর্থ চরিত্রটি অগত্যা একটি"/"
jak.b

74

একটি সাধারণ কার্যকরী জাভাস্ক্রিপ্ট উপায় হবে

mystring = mystring.split('/r').join('/')

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


3
এটি আমার জন্য খুব ভালো কাজ করছে। আমি মাইস্ট্রিং = মাইস্ট্রিং.রেপ্লেস ('/ আর', '/') চেষ্টা করে দেখছি; এটি কেবলমাত্র প্রথম সংশোধককে রূপান্তর করে, বাকিগুলি যেমন আছে তেমন।
আরবি বিষ্ণু

1
আমি মনে করি এটি সর্বোত্তম সমাধান, খুব সহজ এবং এর জন্য আপনাকে রেইগেক্স জানা দরকার নেই!
বাণিজ্যিক আত্মহত্যা

2
চতুর্থ চরিত্রটি অগত্যা একটি'/'
jak.b

1
যাইহোক পরীক্ষাগুলি অনুসারে ( স্ট্যাকওভারফ্লো.com / প্রশ্নস / 4০৪88৮৫০/২ ) আপনি উচ্চ পারফরম্যান্স (সেকেন্ডে 10 ক অপারেশন) না লিখে জাভাস্ক্রিপ্ট না করলে পারফরম্যান্স পার্থক্য কোনও সমস্যা বা "প্রদানের জন্য উচ্চ মূল্য" নয় তাই আমি আপনার মন্তব্য ঠিক কীভাবে দেখতে পাচ্ছি না সমাধানে অবদান
রাখুন

অদক্ষ হওয়া ছাড়াও (এবং এর মতো ফাংশনটি দীর্ঘ তালিকায় এটির ক্ষেত্রে পুনরাবৃত্তভাবে ব্যবহার করা যেতে পারে) এটি ওপির প্রশ্নের উত্তর দেয় না যা সূচকের উপর নির্ভর করে, পূর্ববর্তী চরিত্রের উপর নয়।
শে

49

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

str.slice(0, 4) + str.slice(5, str.length))

প্রথম বা শেষ চরিত্রটি সরিয়ে দেওয়ার সময় এটি কাজ করে না
টেকটিমি

3
@ টেকটিমি কেন? str.slice(0, 0) + str.slice(1, str.length)প্রথমটি str.slice(0, str.length-1) + str.slice(str.length, str.length)সরিয়ে দেয় এবং শেষটিকে সরিয়ে দেয়। (অবশ্যই যদি আপনি জেনে থাকেন যে আপনি সর্বদা প্রথম বা শেষ অপসারণ করছেন তবে আপনি অতিরিক্ত কাজগুলি সরিয়ে
ফেলবেন

30

আপনার প্রথম ফানক প্রায় সঠিক। 'গ্লোবাল' (সম্পাদনা) এর জন্য দাঁড়িয়ে থাকা 'জি' পতাকাটি সরিয়ে ফেলুন এবং দ্বিতীয় 'আর' চিহ্নিত করার জন্য এটি কিছু প্রসঙ্গ দিন।

সম্পাদনা: '/' যুক্ত করার আগে এটি দ্বিতীয় 'আর' ছিল না। একটি RegEx আরগ ব্যবহার করার সময় '/' এড়াতে \ / প্রয়োজন। আপোটিসগুলির জন্য ধন্যবাদ তবে আমি ভুল ছিলাম তাই আমি রেজেক্সের বেসিকগুলি আরও ভালভাবে বুঝতে আগ্রহী ব্যক্তিদের জন্য আরও বিশদ সংশোধন করব এবং এটি কাজ করবে:

mystring.replace(/\/r/, '/')

অত্যধিক ব্যাখ্যার জন্য এখন:

যখন কোনও রেজিএক্স প্যাটার্ন পড়ছেন / লিখছেন তখন এই শর্তাবলী বিবেচনা করুন: <ক্যারেক্টার বা চার্টারের সেট> <a ক্যারেক্টার বা চার্টারের সেট> এর পরে <...

রেজিএক্সে <ক্যারেক্টার বা চার্টার্সের সেট> একবারে এক হতে পারে:

/each char in this pattern/

সুতরাং ই হিসাবে পড়ুন, এরপরে ক, এর পরে সি, ইত্যাদি পড়ুন ...

অথবা একটি একক <a অক্ষর বা সনদের সেট> অক্ষর শ্রেণি দ্বারা বর্ণিত অক্ষর হতে পারে:

/[123!y]/
//any one of these
/[^123!y]/
//anything but one of the chars following '^' (very useful/performance enhancing btw)

বা বিস্তৃত পরিমাণের অক্ষরের সাথে মেলে (তবে সিক্যুয়াল প্যাটার্নের ক্ষেত্রে একক উপাদান হিসাবে বিবেচনা করা এখনও সেরা):

/a{2}/
//precisely two 'a' chars - matches identically as /aa/ would

/[aA]{1,3}/
//1-3 matches of 'a' or 'A'

/[a-zA-Z]+/
//one or more matches of any letter in the alphabet upper and lower
//'-' denotes a sequence in a character class

/[0-9]*/
//0 to any number of matches of any decimal character (/\d*/ would also work)

সুতরাং একসাথে একগুচ্ছ স্মুশ করুন:

   var rePattern = /[aA]{4,8}(Eat at Joes|Joes all you can eat)[0-5]+/g
   var joesStr = 'aaaAAAaaEat at Joes123454321 or maybe aAaAJoes all you can   eat098765';

   joesStr.match(rePattern);

   //returns ["aaaAAAaaEat at Joes123454321", "aAaAJoes all you can eat0"]
   //without the 'g' after the closing '/' it would just stop at the first   match and return:
   //["aaaAAAaaEat at Joes123454321"]

এবং অবশ্যই আমি অতিরিক্ত-বিস্তৃত করেছি তবে আমার বক্তব্যটি কেবল এটি ছিল:

/cat/

3 প্যাটার্ন উপাদানগুলির একটি সিরিজ (কোনও জিনিস একটি জিনিস দ্বারা অনুসরণ করা জিনিস)।

এবং তাই এটি:

/[aA]{4,8}(Eat at Joes|Joes all you can eat)[0-5]+/

রেজিএক্স হিসাবে উদ্বেগজনক দেখতে শুরু হওয়ার সাথে সাথে এটি ক্রমিকভাবে একে অপরকে অনুসরণ করে ধারাবাহিক জিনিসগুলিতে (সম্ভাব্য বহু-চরিত্রের জিনিসগুলি) ভেঙে যায়। একটি মৌলিক বিন্দু কিন্তু এক যে আমাকে অতীত পেতে কিছুটা সময় নিয়েছে তাই আমি এখানে এটি ব্যাখ্যা করে ওভারবোর্ডে গিয়েছি কারণ আমি মনে করি এটি এমন একটি যা ওপি এবং অন্যদের নতুনকে কী ঘটছে তা বুঝতে সহায়তা করবে। RegEx পড়ার / লেখার মূল চাবিকাঠিটি এগুলি টুকরো টুকরো টুকরো করে।


13

'/ R' এর বিশ্বব্যাপী প্রতিস্থাপনের জন্য, এই কোডটি আমার পক্ষে কাজ করেছিল।

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

8

শুধু আপনার ঠিক করুন replaceAt:

String.prototype.replaceAt = function(index, charcount) {
  return this.substr(0, index) + this.substr(index + charcount);
}

mystring.replaceAt(4, 1);

আমি এর removeAtপরিবর্তে কল করব । :)


1
এটি আসলে ওপি-র সমস্যা সমাধান করে এবং সবেমাত্র কোনও আপ ভোট পায়, যখন দুটি শীর্ষ উত্তর মূল প্রশ্নটি সমাধান করে না!
২marks

5
return this.substr(0, index) + char + this.substr(index + char.length);

char.lengthশূন্য। 1চরিত্র এড়ানোর জন্য আপনাকে এই ক্ষেত্রে যুক্ত করতে হবে।


এটি জিজ্ঞাসিত প্রশ্নের উত্তর দেয় না; এটি কেবল কেন replaceAtকাজ করছে না তা ব্যাখ্যা করে। এটি উত্তরের পরিবর্তে মূল প্রশ্নের একটি মন্তব্য হওয়া উচিত। :)
কেন হোয়াইট

@ কেনহাইট, প্রকৃতপক্ষে এটি কেবলমাত্র প্রশ্ন জিজ্ঞাসার উত্তর দেয় Any thoughts?,।
অ্যাশ বুর্লাকজেনকো

যথেষ্ট ফর্সা। আমি একমত নই, তবে ... :) আমি ডাউনওয়েট করি নি, তবে আমি মনে করি না যে এটি উত্তর হিসাবে যোগ্যতা অর্জন করে। একটি উত্তর সমস্যার সমাধান দেবে, বা কমপক্ষে আরও বিশদ দিয়ে ব্যাখ্যা করবে এবং কীভাবে এটি ঠিক করতে হবে তার একটি ধারণা দেয়।
কেন হোয়াইট

@ কেনহাইট, আমি একমত, আমি কেবল এই বিষয়টিই তৈরি করছিলাম যে ওপি তার প্রশ্নটি আরও পরিষ্কার করে দিতে পারে? কিছু লোক কেবল উত্তর না দিয়ে কেবল কোনও দিকে নির্দেশ করতে চায়।
অ্যাশ বুর্লাকজেনকো

1
@ পেইসলির জন্য +1 - এই উত্তরটি কার্যকর নয় কারণ জাভাস্ক্রিপ্টে চর হিসাবে কোনও জিনিস নেই।
সরলতম

2

যদি এটি সর্বদা আপনার স্ট্রিংয়ের চতুর্থ চর হয় তবে আপনি চেষ্টা করতে পারেন:

yourString.replace(/^(.{4})(r)/, function($1, $2) { return $2; });

2

এটি কেবল তখনই কাজ করে যদি আমি এটি অন্য চরিত্রের সাথে প্রতিস্থাপন করি। এটি কেবল এটি সরাবে না।

এর কারণ হল যখন charসমান "", char.length0, তাই আপনার সাবস্ট্রিং মূল পংক্তি গঠনের একত্রিত হয়। আপনার কোড প্রচেষ্টা নিয়ে যাচ্ছেন, নিম্নলিখিতগুলি কাজ করবে:

String.prototype.replaceAt = function (index, char) {
    return this.substr(0, index) + char + this.substr(index + 1);
    //   this will 'replace' the character at index with char ^
}

2

নীচের মত ফাংশন তৈরি করুন

  String.prototype.replaceAt = function (index, char) {
      if(char=='') {
          return this.slice(0,index)+this.substr(index+1 + char.length);
      } else {
          return this.substr(0, index) + char + this.substr(index + char.length);
      }
  }

নীচের মত অক্ষর দিতে প্রতিস্থাপন

  var a="12346";
  a.replaceAt(4,'5');

এখানে চিত্র বর্ণনা লিখুন

এবং নির্দিষ্ট সূচকে অক্ষর অপসারণ করতে, খালি স্ট্রিং হিসাবে দ্বিতীয় প্যারামিটার দিন

a.replaceAt(4,'');

এখানে চিত্র বর্ণনা লিখুন


2

আপনি যদি কেবল একটি একক অক্ষর মুছে ফেলতে চান এবং আপনি যদি কোনও চরিত্রের মুছতে চান তবে আপনি নীচের ফাংশনটি ব্যবহার করতে পারেন:

/**
 * Remove single character at particular index from string
 * @param {*} index index of character you want to remove
 * @param {*} str string from which character should be removed
 */
function removeCharAtIndex(index, str) {
    var maxIndex=index==0?0:index;
    return str.substring(0, maxIndex) + str.substring(index, str.length)
}

এটি কিছু ক্ষেত্রে কাজ করবে না (উদাহরণস্বরূপ সূচক = 0)।
টোমর

1

আমি স্ট্রিং থেকে অক্ষরগুলি সরাতে প্রতিস্থাপন ফাংশনটি ব্যবহার করা পছন্দ করি না। এটি এটি করা যৌক্তিক নয় । সাধারণত আমি সি # তে (শার্প) প্রোগ্রাম করি এবং যখনই আমি স্ট্রিং থেকে অক্ষরগুলি সরাতে চাই, আমি স্ট্রিং ক্লাসের অপসারণ পদ্ধতিটি ব্যবহার করি তবে এটি উপস্থিত থাকা সত্ত্বেও কোনও প্রতিস্থাপন পদ্ধতি নেই কারণ আমি যখন সরিয়ে ফেলতে চলেছি তখন আমি মুছে ফেলি, কোন প্রতিস্থাপন। এটা যৌক্তিক!

জাভাস্ক্রিপ্টে স্ট্রিংয়ের জন্য কোনও অপসারণ ফাংশন নেই, তবে সাবস্ট্রাস্ট ফাংশন রয়েছে। স্ট্রিং থেকে অক্ষরগুলি সরাতে আপনি একবার বা দুবার সাবস্ট্রাস্ট ফাংশনটি ব্যবহার করতে পারেন। আপনি স্ট্রিংয়ের শেষে সূচকগুলিতে অক্ষরগুলি সরাতে নিম্নলিখিত ফাংশনটি তৈরি করতে পারেন, ঠিক সি # পদ্ধতিতে প্রথম ওভারলোড স্ট্রিংয়ের মতো em সরান (ইনট স্টার্টইন্ডেক্স):

function Remove(str, startIndex) {
    return str.substr(0, startIndex);
}

এবং / অথবা আপনি সি সূত্রের সূচনা এবং গণনাতে অক্ষরগুলি সরাতে নীচের ফাংশনটিও তৈরি করতে পারেন, ঠিক সি # পদ্ধতি দ্বিতীয় ওভারলোড স্ট্রিংয়ের মতো em

function Remove(str, startIndex, count) {
    return str.substr(0, startIndex) + str.substr(startIndex + count);
}

এবং তারপরে আপনি আপনার প্রয়োজনের জন্য এই দুটি ফাংশন বা এর একটি ব্যবহার করতে পারেন!

উদাহরণ:

alert(Remove("crt/r2002_2", 4, 1));

আউটপুট: crt / 2002_2

কোনও যুক্তি দিয়ে কৌশল করে লক্ষ্য অর্জনের ফলে কোডটি বোঝার ক্ষেত্রে বিভ্রান্তি ও ভবিষ্যতের ভুলগুলি হতে পারে, যদি আপনি কোনও বড় প্রকল্পে এটি অনেক কিছু করেন!


2
আমি বলব যে বহির্মুখী পদ্ধতিগুলি প্রবর্তন করা আরও বিভ্রান্তিকর যে কেবল ব্যবহার করা String.prototype.replace, যা বেস এপিআইয়ের একটি অংশ। তদুপরি, প্রতিস্থাপনের একটি বিশেষ ক্ষেত্রে হিসাবে অপসারণ বোঝা যতক্ষণ প্রোগ্রামিং হিসাবে যায় তত যুক্তিযুক্ত। আপনি আপনার এপিআইতে ইংরেজি অভিধানের সমস্ত শব্দকে সমন্বিত করার চেষ্টা করবেন না, আপনার এপিআই এর ন্যূনতম অরথোগোনাল বেসে হ্রাস করার চেষ্টা করা উচিত।
উইটিকো

1

নিম্নলিখিত ফাংশনটি আমার ক্ষেত্রে সবচেয়ে ভাল কাজ করেছে:

public static cut(value: string, cutStart: number, cutEnd: number): string {
    return value.substring(0, cutStart) + value.substring(cutEnd + 1, value.length);
}

1

সংক্ষিপ্ততম উপায়টি হবে স্প্লাইস ব্যবহার করা

var inputString = "abc";
// convert to array and remove 1 element at position 4 and save directly to the array itself
let result = inputString.split("").splice(3, 1).join();
console.log(result);

স্প্লাইস মূল অ্যারেটিকে রূপান্তরিত করে এবং কেবল প্রভাবিত উপাদানগুলিকে ফেরত দেয়। যেহেতু অ্যারে শূন্য সূচিবদ্ধ হয়েছে এই উদাহরণে ফিরে আসবে "" (অ্যারের মধ্যে 3 য় উপাদান যেহেতু মধ্যে ফাঁকা cএবং ")
JKirchartz

1

আপনি এটি ব্যবহার করতে পারেন: if ( str[4] === 'r' ) str = str.slice(0, 4) + str.slice(5)

ব্যাখ্যা:

  1. if ( str[4] === 'r' )
    5 তম অক্ষরটি কিনা তা পরীক্ষা করুন 'r'

  2. str.slice(0, 4)
    স্ট্রাইসটি স্লাইস করুন এর আগে সবকিছু পেতে 'r'

  3. + str.slice(5)
    বাকি স্ট্রিং যুক্ত করুন।

Minified: s=s[4]=='r'?s.slice(0,4)+s.slice(5):s [37 বাইট!]

ডেমো:

function remove5thR (s) {
  s=s[4]=='r'?s.slice(0,4)+s.slice(5):s;
  console.log(s); // log output
}

remove5thR('crt/r2002_2')  // > 'crt/2002_2'
remove5thR('crt|r2002_2')  // > 'crt|2002_2'
remove5thR('rrrrr')        // > 'rrrr'
remove5thR('RRRRR')        // > 'RRRRR' (no change)


1
let str = '1234567';
let index = 3;
str = str.substring(0, index) + str.substring(index + 1);
console.log(str) // 123567 - number "4" under index "3" is removed

0

এটি সরলতম উত্তরের উন্নতি (দৈর্ঘ্য বাদ দিন)

s.slice(0,4)+s.slice(5)


-1

সি # (শার্প) এ, আপনি 'empty 0' হিসাবে খালি অক্ষর তৈরি করতে পারেন। আপনি এটি করতে পারেন:

String.prototype.replaceAt = function (index, char) {
return this.substr(0, index) + char + this.substr(index + char.length);
}
mystring.replaceAt(4, '\0')

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

অবশেষে সেই 'আর' চরিত্রটি মুছে ফেলা হবে!

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