Löschen Sie das erste Zeichen einer Zeichenfolge in Javascript


505

Ich möchte das erste Zeichen einer Zeichenfolge löschen, wenn das erste Zeichen eine 0 ist. Die 0 kann mehr als einmal vorhanden sein.

Gibt es eine einfache Funktion, die das erste Zeichen überprüft und löscht, wenn es 0 ist?

Im Moment versuche ich es mit der JS- slice()Funktion, aber es ist sehr umständlich.

Antworten:


763

Sie können das erste Zeichen einer Zeichenfolge entfernen, indem Sie substr:

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

So entfernen Sie alle Nullen am Anfang der Zeichenfolge:

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

11
@Stephen: In diesem Fall würde es keinen Unterschied machen, da charAtimmer eine Zeichenfolge zurückgegeben wird, selbst wenn der Index den Index des letzten Zeichens überschreitet, sodass kein Typzwang ausgeführt wird und der Algorithmus am Ende identisch ist. Aber ich ziehe es ===vor, ==auch wenn es keinen Unterschied macht. ;)
user113716

4
@Hejner: Wenn die Typen gleich sind, wie sie sich immer in diesem Fall wären, dann ===und ==führen genau die gleichen Schritte (gemäß der Spezifikation, zumindest), so gibt es keinen Grund , warum man erwartet eine bessere Leistung als die anderen .
Tim Down

2
@ MiguelCoder. Je nach Spezifikation sind die Schritte gleich (Browser-Implementierungen können natürlich abweichen). Lies es, wenn du mir nicht glaubst.
Tim Down

3
@ReallyNiceCode abgesehen von der Tatsache, dass die Frage vor über 8 Jahren gestellt wurde. Es wurde angegeben "Die 0 kann mehr als einmal da sein." und der Fragesteller akzeptierte meine Lösung.
Shaded

6
Obwohl nach wie vor gültig ist , sollten Sie Ihre Antwort aktualisieren, durch den Ersatz substrmit substring. Überprüfen Sie MDN: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Soul Reaver

186

Sehr gut lesbarer Code ist .substring()mit einem Start zu verwenden, der auf den Index des zweiten Zeichens (1) gesetzt ist (das erste Zeichen hat den Index 0). Der zweite Parameter der .substring()Methode ist eigentlich optional, sodass Sie nicht einmal .length()...

TL; DR: Erstes Zeichen aus der Zeichenfolge entfernen:

str = str.substring(1);

... ja so einfach ist das ...

Entfernen bestimmter Zeichen:

Wie von @Shaded vorgeschlagen, führen Sie eine Schleife durch, während das erste Zeichen Ihrer Zeichenfolge das "unerwünschte" Zeichen ist ...

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

Zitat aus (und mehr dazu in) Was ist der Unterschied zwischen String.slice und String.substring?

Er weist auch darauf hin, dass die zu schneidenden Parameter, wenn sie negativ sind, auf die Zeichenfolge vom Ende verweisen. Teilstring und Substrat nicht.



61

Der einfachste Weg, alle führenden 0s zu entfernen, ist:

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

Wenn Sie nur einen einzelnen 0Hauptcharakter entfernen , wie die Frage impliziert, können Sie verwenden

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

26

Sie können dies mit der Teilstring- Methode tun :

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

Für alle 0s: http://jsfiddle.net/An4MY/

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

Ja, das würde funktionieren, wenn nur eine 0 in der Zeichenfolge ist. Aber ich brauche es auch, wenn der String wie var s = "00test0" aussieht; dann mussten nur die ersten beiden 0 ersetzt werden
Jings

1
Warum nicht charAt? Warum die Klammern? Warum eine Prototyp-Erweiterung? 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

Hier ist eine, die nicht davon ausgeht string, dass die Eingabe a ist , verwendet substringund mit ein paar Unit-Tests geliefert wird:

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
Dies funktioniert nicht wie erwartet und ist auch sehr ineffizient.
Ry-

0

Aus der Javascript-Implementierung von trim ()>, die Leerzeichen aus Zeichenfolgen entfernt und führt oder beendet. Hier ist eine geänderte Implementierung der Antwort auf diese Frage.

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

Ursprüngliche Implementierung hierfür auf JS

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

Wir betrachten Verwirrung nicht als Implementierungsproblem. Sie wird jedoch häufig auf einen Kapazitätsmangel zurückgeführt, der darin besteht, mit den Variablen Schritt zu halten, die Ihre Umgebung Ihnen bietet. In diesem Fall sind Ihre neuronalen Verbindungen nicht in der Lage, das notwendige Verständnis dieser veränderten Übernahme einer nativen js-Funktionsimplementierung als Antwort auf die ursprüngliche Frage zu verarbeiten.
Fino
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.