Javascript'te bir dizenin ilk karakterini sil


505

İlk karakter 0 ise, bir dizenin ilk karakterini silmek istiyorum. 0 birden fazla olabilir.

İlk karakteri kontrol eden ve 0 ise silen basit bir işlev var mı?

Şu anda, JS slice()işlevi ile deniyorum ama çok garip.

Yanıtlar:


763

Bir dizenin ilk karakterini aşağıdakileri kullanarak kaldırabilirsiniz substr:

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

Dizenin başındaki 0'ların tümünü kaldırmak için:

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

11
@Stephen: Bu durumda, bir fark yaratmaz çünkü charAtdizin son karakterin dizinini aşsa bile her zaman bir dize döndürür, bu nedenle hiçbir tür zorlama yapılmaz ve algoritma aynı olur. Ama tercih edersiniz ===üzerinde ==bir fark yapmaz bile. ;)
user113716

4
@Hejner: Türler her zaman olduğu gibi aynıysa, o zaman ===ve ==tam olarak aynı adımları uygulayın (en azından spesifikasyona göre), bu yüzden birinin diğerinden daha iyi performans göstermesini beklemek için bir neden yoktur. .
Tim Down

2
@MiguelCoder. Spesifikasyona göre, adımlar aynıdır (tarayıcı uygulamaları elbette farklı olabilir). Bana inanmıyorsanız okuyun.
Tim Down

3
@ReallyNiceCode, sorunun 8 yıl önce sorulduğu gerçeğini bir kenara bırakıyor. "0 bir kereden fazla orada olabilir." ve asker çözümümü kabul etti.
gölgeli

6
Hala geçerli olsa da, değiştirerek, cevabınızı güncellemeniz gerekmektedir substrbirlikte substring. MDN'yi kontrol edin: developer.mozilla.org/tr-TR/docs/Web/JavaScript/Reference/…
Soul Reaver

186

Çok okunabilir kod, .substring()ikinci karakterin indeksine (1) ayarlanmış bir başlangıç ​​ile kullanılır (ilk karakterin indeksi 0'dır). .substring()Yöntemin ikinci parametresi aslında isteğe bağlıdır, bu yüzden aramanıza bile gerek yoktur .length()...

TL; DR: Dizeden ilk karakteri kaldırın:

str = str.substring(1);

...Evet, bu kadar basit...

Bazı karakterleri kaldırma:

@Shaded'in önerdiği gibi, dizenizin ilk karakteri "istenmeyen" karakter iken bunu döngüye sokun ...

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()vs .substring()vs.substr()

Alıntı: (ve daha fazlası) String.slice ve String.substring arasındaki fark nedir?

Ayrıca, dilim parametreleri negatifse, dizeden sondan referans aldıklarına dikkat çeker. Substring ve substr yapmaz.



61

Tüm önde gelenleri soymanın en kolay yolu 0:

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

0Sorunun da ifade ettiği gibi, tek bir satır karakteri soyarsanız

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

26

Subring yöntemi ile yapabilirsiniz :

let a = "My test string";

a = a.substring(1);

console.log(a); // y test string


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

Herkes için 0: http://jsfiddle.net/An4MY/

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

Evet, dizede yalnızca bir 0 varsa bu işe yarar. Ama ben dize var s = "00test0" gibi görünüyorsa da ihtiyacım var; o zaman sadece ilk iki 0 değiştirilmelidir
Jings

1
Neden olmasın charAt? Neden parantez? Neden bir prototip uzantısı? Yuck.
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

İşte girdinin a olduğunu string, kullanmadığını substringve birkaç birim testle geldiğini varsaymayan bir tanesi:

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
Bu beklendiği gibi çalışmaz ve aynı zamanda gerçekten verimsizdir.
Ry-

0

Dizelerden boşlukları silen ve çıkaran trim ()> Javascript uygulamasından. İşte bu sorunun cevabının değiştirilmiş bir uygulaması.

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

JS'de bunun için orijinal uygulama

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

karışıklığı bir uygulama problemi olarak görmüyoruz, ancak bu genellikle ortamınızın size sunduğu değişkenlere ayak uyduracak bir kapasite eksikliğine atfedilir. Bu durumda, sinirsel bağlantılarınız, özgün soruya bir cevap olarak yerel bir js işlevi uygulamasının değiştirilmiş kabulünün gerekli anlayışını ele alamaz.
fino
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.