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.

Jings
quelle

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);
}
Schattiert
quelle
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.

jave.web
quelle
84

Verwenden Sie .charAt()und .slice().

Beispiel: http://jsfiddle.net/kCpNQ/

var myString = "0String";

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

Wenn 0am Anfang mehrere Zeichen stehen könnten , können Sie das if()in a ändern while().

Beispiel: http://jsfiddle.net/kCpNQ/1/

var myString = "0000String";

while( myString.charAt( 0 ) === '0' )
    myString = myString.slice( 1 );
user113716
quelle
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/, "");
Tim Down
quelle
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
Andrew
quelle
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();
zsalzbank
quelle
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));
bambolobred
quelle
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);

ChaosPandion
quelle
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/

bdukes
quelle
2

Versuchen

s.replace(/^0/,'')

Kamil Kiełczewski
quelle
0
var test = '0test';
test = test.replace(/0(.*)/, '$1');
kelloti
quelle
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,'');
 }
}
fino
quelle
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