जावास्क्रिप्ट में एक स्ट्रिंग के पहले चरित्र को हटा दें


505

मैं एक स्ट्रिंग के पहले चरित्र को हटाना चाहता हूं, अगर पहला वर्ण 0. है। 0 0 एक से अधिक बार हो सकता है।

क्या कोई साधारण कार्य है जो पहले वर्ण की जाँच करता है और 0 होने पर उसे हटा देता है?

अभी, मैं इसे JS slice()फ़ंक्शन के साथ आज़मा रहा हूं लेकिन यह बहुत ही अजीब है।

जवाबों:


763

आप एक स्ट्रिंग के पहले वर्ण को हटा सकते हैं substr:

var s1 = "foobar";
var s2 = s1.substr(1);
alert(s2); // shows "oobar"

स्ट्रिंग की शुरुआत में सभी को हटाने के लिए:

var s = "0000test";
while(s.charAt(0) === '0')
{
 s = s.substr(1);
}

11
@ स्टीफन: इस मामले में, इससे कोई फर्क नहीं पड़ेगा क्योंकि charAtहमेशा एक स्ट्रिंग लौटाता है, भले ही सूचकांक पिछले वर्ण के सूचकांक से अधिक हो, इसलिए कोई प्रकार का जबरदस्ती प्रदर्शन नहीं किया गया है, और एल्गोरिथ्म समान हो रहा है। लेकिन मैं पसंद करते हैं ===अधिक ==तब भी जब यह एक फर्क नहीं है। ;)
user113716

4
@Hejner: प्रकार, एक ही कर रहे हैं के रूप में वे हमेशा इस मामले में तो हो सकता है, ===और ==ठीक उन्हीं चरणों (कम से कम कल्पना के अनुसार,) करते हैं, तो वहाँ अन्य की तुलना में बेहतर प्रदर्शन करने के लिए एक उम्मीद का कोई कारण नहीं है ।
टिम डाउन

2
@MiguelCoder। युक्ति के अनुसार, चरण समान हैं (ब्राउज़र कार्यान्वयन भिन्न हो सकते हैं, निश्चित रूप से)। अगर आपको मुझ पर विश्वास नहीं है तो इसे पढ़ें।
टिम डाउन

3
@ReallyNiceCode ने इस तथ्य को एक तरफ रख दिया कि 8 साल पहले सवाल पूछा गया था। यह कहा गया था "0 एक से अधिक बार हो सकता है।" और पूछने वाले ने मेरा समाधान स्वीकार कर लिया।
छायांकित

6
हालांकि अभी भी मान्य है, आपको अपने उत्तर को अपडेट करना चाहिए, के substrसाथ प्रतिस्थापित करके substring। MDN की जाँच करें: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
सोल रीवर

186

बहुत पठनीय कोड .substring()दूसरे वर्ण (1) के पहले सेट इंडेक्स के साथ उपयोग करना है (पहले वर्ण में इंडेक्स 0 है)। .substring()विधि का दूसरा पैरामीटर वास्तव में वैकल्पिक है, इसलिए आपको कॉल करने की आवश्यकता नहीं है .length()...

TL; DR: स्ट्रिंग से पहला वर्ण निकालें:

str = str.substring(1);

...हां, यह उतना सरल है...

कुछ विशेष वर्णों को हटाना:

जैसा कि @Shaded ने सुझाव दिया है, बस इसे लूप करें जबकि आपकी स्ट्रिंग का पहला चरित्र "अवांछित" चरित्र है ...

var yourString = "0000test";
var unwantedCharacter = "0";
//there is really no need for === check, since we use String's charAt()
while( yourString.charAt(0) == unwantedCharacter ) yourString = yourString.substr(1);
//yourString now contains "test"

.slice()बनाम .substring()बनाम.substr()

(और उस पर और अधिक) से बोली String.slice और String.substring के बीच क्या अंतर है?

वह यह भी बताते हैं कि यदि स्लाइस के पैरामीटर नकारात्मक हैं, तो वे स्ट्रिंग को अंत से संदर्भित करते हैं। पदार्थ और पदार्थ नहीं करता है।


84

का उपयोग करें .charAt()और .slice()

उदाहरण: http://jsfiddle.net/kCpNQ/

var myString = "0String";

if( myString.charAt( 0 ) === '0' )
    myString = myString.slice( 1 );

यदि कई हो सकता है 0शुरुआत में अक्षर, आप बदल सकते हैं if()एक करने के लिए while()

उदाहरण: http://jsfiddle.net/kCpNQ/1/

var myString = "0000String";

while( myString.charAt( 0 ) === '0' )
    myString = myString.slice( 1 );

61

सभी प्रमुख 0एस को पट्टी करने का सबसे आसान तरीका है:

var s = "00test";
s = s.replace(/^0+/, "");

यदि केवल एक प्रमुख 0चरित्र को अलग करना , जैसा कि प्रश्न का तात्पर्य है, आप उपयोग कर सकते हैं

s = s.replace(/^0/, "");



7
var s = "0test";
if(s.substr(0,1) == "0") {
    s = s.substr(1);
}

सभी के लिए 0: http://jsfiddle.net/An4MY/

String.prototype.ltrim0 = function() {
 return this.replace(/^[0]+/,"");
}
var s = "0000test".ltrim0();

हाँ, यह काम करेगा, अगर केवल एक 0 स्ट्रिंग में हो। लेकिन मुझे इसकी भी आवश्यकता है अगर स्ट्रिंग var s = "00test0" जैसा दिखता है; तब केवल पहले दो 0 को प्रतिस्थापित किया जाना था
Jings

1
क्यों नहीं charAt? कोष्ठक क्यों? एक प्रोटोटाइप का विस्तार क्यों? छी।
Ry-

6
//---- remove first and last char of str    
str = str.substring(1,((keyw.length)-1));

//---- remove only first char    
str = str.substring(1,(keyw.length));

//---- remove only last char    
str = str.substring(0,(keyw.length));

4

String.prototype.trimStartWhile = function(predicate) {
    if (typeof predicate !== "function") {
    	return this;
    }
    let len = this.length;
    if (len === 0) {
        return this;
    }
    let s = this, i = 0;
    while (i < len && predicate(s[i])) {
    	i++;
    }
    return s.substr(i)
}

let str = "0000000000ABC",
    r = str.trimStartWhile(c => c === '0');
    
console.log(r);


3

यहां एक ऐसा माना जाता है कि इनपुट एक string, उपयोग substring, और यूनिट परीक्षणों के एक जोड़े के साथ आता है:

var cutOutZero = function(value) {
    if (value.length && value.length > 0 && value[0] === '0') {
        return value.substring(1);
    }

    return value;
};

http://jsfiddle.net/TRU66/1/



0
var test = '0test';
test = test.replace(/0(.*)/, '$1');

2
यह उम्मीद के मुताबिक प्रदर्शन नहीं करता है और वास्तव में अक्षम भी है।
Ry-

0

ट्रिम के जावास्क्रिप्ट कार्यान्वयन से ()> जो स्ट्रिंग्स से रिक्त स्थान को निकालता है और अग्रणी करता है। यहाँ इस प्रश्न के उत्तर का एक परिवर्तित कार्यान्वयन है।

var str = "0000one two three0000"; //TEST  
str = str.replace(/^\s+|\s+$/g,'0'); //ANSWER

जेएस पर इसके लिए मूल कार्यान्वयन

string.trim():
if (!String.prototype.trim) {
 String.prototype.trim = function() {
  return this.replace(/^\s+|\s+$/g,'');
 }
}

हालांकि, हम भ्रम की स्थिति को लागू करने की समस्या नहीं मानते हैं, हालांकि, इसे अक्सर आपके पर्यावरण द्वारा आपके सामने प्रस्तुत किए जाने वाले चर के साथ रखने की क्षमता की कमी के लिए जिम्मेदार ठहराया जाता है। इस मामले में, आपके तंत्रिका कनेक्शन मूल सवाल के जवाब के रूप में एक देशी जेएस फ़ंक्शन कार्यान्वयन के इस परिवर्तित गोद लेने की आवश्यक समझ को संभालने में असमर्थ हैं।
फ़िनो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.