Elimina il primo carattere di una stringa in Javascript


506

Voglio eliminare il primo carattere di una stringa, se il primo carattere è uno 0. Lo 0 può essere lì più di una volta.

Esiste una semplice funzione che controlla il primo carattere e lo elimina se è 0?

In questo momento, lo sto provando con la slice()funzione JS ma è molto imbarazzante.

Risposte:


764

Puoi rimuovere il primo carattere di una stringa usando substr:

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

Per rimuovere tutti gli 0 all'inizio della stringa:

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

11
@Stephen: In questo caso, non farebbe differenza perché charAtrestituisce sempre una stringa, anche se l'indice supera l'indice dell'ultimo carattere, quindi non viene eseguita alcuna coercizione di tipo e l'algoritmo finisce per essere identico. Ma preferisco ===rispetto ==anche quando non fa differenza. ;)
user113716

4
@Hejner: Se i tipi sono gli stessi, come sempre sarebbe in questo caso, quindi ===e ==eseguire esattamente gli stessi passi (secondo le specifiche, almeno), quindi non c'è ragione di aspettarsi uno per eseguire meglio dell'altro .
Tim Down,

2
@MiguelCoder. Secondo le specifiche, i passaggi sono gli stessi (le implementazioni del browser possono differire, ovviamente). Leggi se non mi credi.
Tim Down,

3
@ReallyNiceCode mettendo da parte il fatto che la domanda è stata posta oltre 8 anni fa. È stato dichiarato "Lo 0 può essere lì più di una volta." e il richiedente ha accettato la mia soluzione.
Ombreggiato il

6
Sebbene sia ancora valido, è necessario aggiornare la risposta, sostituendo substrcon substring. Controlla MDN: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Soul Reaver,

187

Il codice molto leggibile deve essere utilizzato .substring()con un inizio impostato sull'indice del secondo carattere (1) (il primo carattere ha indice 0). Il secondo parametro del .substring()metodo è in realtà facoltativo, quindi non è nemmeno necessario chiamare .length()...

TL; DR: rimuove il primo carattere dalla stringa:

str = str.substring(1);

...Si, è così semplice...

Rimozione di alcuni caratteri particolari:

Come suggerito da @Shaded, esegui semplicemente questo ciclo mentre il primo carattere della stringa è il carattere "indesiderato" ...

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

Citazione da (e altro ancora in quello) Qual è la differenza tra String.slice e String.substring?

Sottolinea inoltre che se i parametri da suddividere sono negativi, fanno riferimento alla stringa dalla fine. Sottostringa e substr no.



61

Il modo più semplice per eliminare tutte le principali 0s è:

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

Se solo spogli un singolo 0personaggio principale , come suggerisce la domanda, potresti usare

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

26

Puoi farlo con il metodo di sottostringa :

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

Per tutti gli utenti 0: http://jsfiddle.net/An4MY/

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

Sì, funzionerebbe, se nella stringa fosse presente solo uno 0. Ma ne ho bisogno anche se la stringa sembra var s = "00test0"; quindi solo i primi due 0 dovevano essere sostituiti
Jings

1
Perché no charAt? Perché le parentesi? Perché un'estensione prototipo? Che schifo.
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

Eccone uno che non presume che l'ingresso sia un string, utilizza substringe viene fornito con un paio di unit test:

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
Questo non funziona come previsto ed è anche molto inefficiente.
Ry-

0

Dall'implementazione Javascript di trim ()> che rimuove e conduce gli spazi iniziali o finali dalle stringhe. Ecco un'implementazione alterata della risposta a questa domanda.

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

Implementazione originale per questo su JS

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

non consideriamo la confusione un problema di implementazione, tuttavia, è spesso attribuita a una carenza di capacità di tenere il passo con le variabili che l'ambiente ti presenta. In questo caso, le tue connessioni neurali non sono in grado di gestire la necessaria comprensione di questa adozione modificata di un'implementazione della funzione js nativa come risposta alla domanda originale.
fino
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.