मैं जावास्क्रिप्ट का उपयोग करके स्ट्रिंग से एक चरित्र कैसे निकाल सकता हूं?


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, '')

यह केवल तभी काम करता है जब मैं इसे किसी अन्य चरित्र से प्रतिस्थापित करता हूं। यह बस इसे दूर नहीं करेगा।

कोई विचार?


यहाँ क्या समस्या है, "r" -s को हटा दिया गया था क्या वे नहीं थे?
व्लादिमीर डेस्पोटोविक

जवाबों:


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

उपयोग करने के /rसाथ बदल जाएगा ।/String.prototype.replace

वैकल्पिक रूप से आप एक वैश्विक झंडे के साथ रेगेक्स का उपयोग कर सकते हैं (जैसा कि एरिक रेपेन और सागर गाला द्वारा सुझाया गया है ), सभी घटनाओं को बदलने के लिए

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

संपादित करें: चूंकि हर किसी को यहाँ बहुत मज़ा आ रहा है और user1293504 स्पष्ट सवालों के जवाब देने के लिए जल्द ही किसी भी समय वापस नहीं आ रहा है, यहाँ एक स्ट्रिंग से Nth चरित्र को हटाने की विधि है:

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

चूंकि user1293504 ने शून्य-अनुक्रमित गणना के बजाय सामान्य गणना का उपयोग किया है, इसलिए हमें इंडेक्स से 1 को निकालना होगा, यदि आप यह उपयोग करना चाहते हैं कि यह दोहराने के लिए कि कैसे charAtकार्य 3 लाइन पर इंडेक्स से 1 को घटाएं नहीं और tmp.splice(i, 1)इसके बजाय उपयोग करें ।


3
चौथा चरित्र जरूरी नहीं है"/"
19 '

74

एक सरल कार्यात्मक जावास्क्रिप्ट तरीका होगा

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

सरल, तेज, यह विश्व स्तर पर प्रतिस्थापित करता है और कार्यों या प्रोटोटाइप की कोई आवश्यकता नहीं है


3
यह मेरे लिए बहुत अच्छा काम करता है। जबकि मैं मिस्टीरिंग = मिस्ट्रींग की कोशिश करता हूं। क्रेप ('/ आर', '/'); यह केवल पहले सुधारक को परिवर्तित करता है, बाकी के रूप में यह वैसा ही है।
आरबी विष्णु

1
मुझे लगता है कि यह सबसे अच्छा समाधान है, बहुत सरल है और आपको इसके लिए regex को जानने की आवश्यकता नहीं है!
वाणिज्यिक आत्महत्या

2
चौथा चरित्र जरूरी नहीं है'/'
jak.b

1
वैसे भी परीक्षण के अनुसार ( stackoverflow.com/questions/50463850/… ) जब तक आप एक उच्च प्रदर्शन (सेकंड प्रति 10k संचालन) को नहीं छोड़ते हैं, तो प्रदर्शन अंतर एक मुद्दा या "भुगतान करने के लिए उच्च मूल्य" नहीं है, इसलिए मैं आपकी टिप्पणी नहीं देखता हूं समाधान में योगदान
Strife86

अकुशल होने के अलावा (और इस तरह का एक फ़ंक्शन लंबी सूचियों पर पुनरावृत्त रूप से उपयोग किया जा सकता है जहां यह मायने रखता है) यह ओपी के सवाल का जवाब नहीं देता है जो सूचकांक पर निर्भर करता है, पूर्ववर्ती चरित्र पर नहीं।
जूल

49

हमेशा स्ट्रिंग कार्य होते हैं, यदि आप जानते हैं कि आप हमेशा चौथे वर्ण को निकालने जा रहे हैं:

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

पहला या आखिरी चरित्र निकालते समय यह काम नहीं करता है
TekTimmy

3
@TekTimmy क्यों नहीं? str.slice(0, 0) + str.slice(1, str.length)पहले को str.slice(0, str.length-1) + str.slice(str.length, str.length)हटाता है और आखिरी को हटाता है। (यदि आप जानते हैं कि आप हमेशा पहले या अंतिम को हटा रहे हैं, लेकिन यदि आप वैरिएबल के साथ-साथ किसी अन्य सूचकांक में भी काम करते हैं, तो आप इसे हटा देंगे।)
JJJ

30

आपकी पहली दुर्गंध लगभग सही है। बस 'जी' ध्वज को हटा दें जो 'वैश्विक' (संपादित) के लिए खड़ा है और इसे दूसरा 'आर' स्पॉट करने के लिए कुछ संदर्भ दें।

संपादित करें: ऐसा नहीं देखा कि यह '/' जोड़ा जाने से पहले दूसरा 'r' था। RegEx arg का उपयोग करते समय '/' से बचने के लिए \ / की जरूरत है। Upvotes के लिए धन्यवाद, लेकिन मैं गलत था इसलिए मैं ठीक करूंगा और regEx की मूल बातें समझने में रुचि रखने वाले लोगों के लिए और अधिक विवरण जोड़ूंगा, लेकिन काम करेगा:

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

अब अत्यधिक स्पष्टीकरण के लिए:

जब एक regEx पैटर्न पढ़ / लिख रहा हो, तो उसके संदर्भ में सोचें: <a चरित्र या charcters> का सेट, उसके बाद <a चरित्र या charcters> का सेट <...

RegEx <a चरित्र या charcters> के सेट में एक समय में एक हो सकता है:

/each char in this pattern/

इसलिए ई के रूप में पढ़ें, उसके बाद ए, सी के बाद, आदि ...

या एक एकल चरित्र या charcters> का सेट चरित्र वर्ण द्वारा वर्णित वर्ण हो सकता है:

/[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
यह वास्तव में ओपी की समस्या को हल करता है और मुश्किल से किसी को वोट मिलता है, जबकि दो शीर्ष उत्तर मूल प्रश्न को हल नहीं करते हैं!
१२:०४ में जूल

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

char.lengthशून्य है। 1चरित्र को छोड़ने के लिए आपको इस मामले में जोड़ना होगा ।


यह पूछे गए प्रश्न का उत्तर नहीं देता है; यह केवल यह बताता है कि replaceAtकाम क्यों नहीं कर रहा है। यह उत्तर के बजाय मूल प्रश्न के लिए एक टिप्पणी होनी चाहिए। :)
केन व्हाइट

@KenWhite,, वास्तव में यह जवाब देने करता है केवल प्रश्न पूछना Any thoughts?
ऐश बर्लज़ेंको

काफी उचित। मैं सहमत नहीं हूँ, लेकिन ... :) मैंने हार नहीं मानी, लेकिन मुझे नहीं लगता कि यह उत्तर के रूप में योग्य है। एक उत्तर समस्या का समाधान प्रदान करेगा, या कम से कम अधिक विवरण के साथ समझाएगा और इसे ठीक करने के तरीके के बारे में विचार करेगा।
केन व्हाइट

@KenWhite, मैं सहमत हूं, मैं सिर्फ यह बात कर रहा था कि ओपी अपना प्रश्न स्पष्ट कर सकता है? कुछ लोग केवल उत्तर दिए जाने के बजाय एक दिशा में इंगित करना चाहते हैं।
ऐश बर्लज़ेंको

1
+1 @ @ के लिए - यह उत्तर सहायक नहीं है, क्योंकि जावास्क्रिप्ट में चार जैसी कोई चीज नहीं है।
सिंपलीज

2

अगर यह हमेशा आपके प्रयास में 4 नंबर का हो तो आप कोशिश कर सकते हैं:

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

मैं स्ट्रिंग से वर्णों को हटाने के लिए प्रतिस्थापित फ़ंक्शन का उपयोग करना पसंद करता हूं। ऐसा करना तर्कसंगत नहीं है। आमतौर पर मैं C # (शार्प) में प्रोग्राम करता हूं, और जब भी मैं स्ट्रिंग से वर्णों को हटाना चाहता हूं, तो मैं स्ट्रिंग क्लास की निकालें विधि का उपयोग करता हूं, लेकिन कोई रिप्लेसमेंट विधि नहीं है, हालांकि यह मौजूद है, क्योंकि जब मैं हटाने वाला हूं, तो मैं हटा देता हूं, कोई जगह नहीं। यह तार्किक है!

जावास्क्रिप्ट में, स्ट्रिंग के लिए कोई निष्कासन फ़ंक्शन नहीं है, लेकिन रूट फ़ंक्शन है। स्ट्रिंग से वर्णों को निकालने के लिए आप एक या दो बार रूट फ़ंक्शन का उपयोग कर सकते हैं। आप अनुक्रमणिका को स्ट्रिंग के अंत तक वर्णों को हटाने के लिए निम्न कार्य कर सकते हैं, जैसे कि c # विधि पहले अधिभार String.Remove (int startIndex):

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

और / या आप प्रारंभ इंडेक्स और काउंट पर वर्णों को हटाने के लिए निम्न कार्य कर सकते हैं, ठीक उसी तरह जैसे कि c # विधि दूसरा अधिभार String.Remove (int startIndex, int count):

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, जो आधार एपीआई का एक हिस्सा है। इसके अलावा, प्रतिस्थापन के एक विशेष मामले के रूप में हटाने को समझना काफी तार्किक है जहां तक ​​प्रोग्रामिंग जाती है। आपको अपने एपीआई को अंग्रेजी शब्दकोश में सभी शब्दों को शामिल करने की कोशिश नहीं करनी चाहिए, आपको अपने एपीआई को अपने न्यूनतम रूढ़िवादी आधार को कम करने की कोशिश करनी चाहिए।
19

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)
    बाकी स्ट्रिंग जोड़ें।

न्यूनतम: 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

C # (तीव्र) में, आप खाली वर्ण को '\ 0' बना सकते हैं। शायद आप ऐसा कर सकते हैं:

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

Google पर खोजें या इंटरफ़ेंट पर सर्फ करें और जांचें कि क्या जावास्क्रिप्ट आपको खाली वर्ण बनाने की अनुमति देता है, जैसे C # करता है। यदि हाँ, तो यह सीखें कि यह कैसे करना है, और हो सकता है कि प्रतिस्थापन कार्य अंत में काम करेगा, और आप जो चाहें प्राप्त करेंगे!

अंत में उस 'r' अक्षर को हटा दिया जाएगा!

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