Eliminar el primer carácter de una cadena en Javascript


506

Quiero eliminar el primer carácter de una cadena, si el primer carácter es un 0. El 0 puede estar allí más de una vez.

¿Existe una función simple que verifica el primer carácter y lo elimina si es 0?

En este momento, lo estoy intentando con la slice()función JS pero es muy incómodo.

Respuestas:


764

Puede eliminar el primer carácter de una cadena usando substr:

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

Para eliminar todos los 0 al comienzo de la cadena:

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

11
@Stephen: en este caso, no habría diferencia porque charAtsiempre devuelve una cadena, incluso si el índice excede el índice del último carácter, por lo que no se realiza una coerción de tipo y el algoritmo termina siendo idéntico. Pero yo prefiero ===más ==aún cuando no hace una diferencia. ;)
user113716

44
@Hejner: Si los tipos son los mismos, ya que siempre estarían en este caso, a continuación, ===y ==realizar exactamente los mismos pasos (de acuerdo con la especificación, por lo menos), así que no hay razón para esperar un mejor desempeño que el otro .
Tim Down

2
@MiguelCoder. Según la especificación, los pasos son los mismos (las implementaciones del navegador pueden diferir, por supuesto). Léelo si no me crees.
Tim Down

3
@ReallyNiceCode dejando de lado el hecho de que la pregunta se hizo hace más de 8 años. Se dijo "El 0 puede estar allí más de una vez". y el autor de la pregunta aceptó mi solución.
Sombreado el

66
Aunque sigue siendo válido, debe actualizar su respuesta reemplazándola substrpor substring. Consulte MDN: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Soul Reaver

187

Se debe usar .substring()un código muy legible con un inicio establecido en el índice del segundo carácter (1) (el primer carácter tiene índice 0). El segundo parámetro del .substring()método es realmente opcional, por lo que ni siquiera necesita llamar .length()...

TL; DR: eliminar el primer carácter de la cadena:

str = str.substring(1);

...sí, es así de simple...

Eliminar algunos caracteres en particular:

Como sugirió @Shaded, simplemente repita esto mientras el primer carácter de su cadena es el carácter "no deseado" ...

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

Cita de (y más sobre eso en) ¿Cuál es la diferencia entre String.slice y String.substring?

También señala que si los parámetros para cortar son negativos, hacen referencia a la cadena desde el final. Subcadena y subcadena no.



61

La forma más fácil de eliminar todos los 0s principales es:

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

Si solo quita un solo 0personaje principal , como la pregunta implica, podría usar

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

26

Puedes hacerlo con el método de subcadena :

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

Para todos los 0s: http://jsfiddle.net/An4MY/

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

Sí, esto funcionaría si solo un 0 está en la cadena. Pero también lo necesito si la cadena se parece a var s = "00test0"; entonces solo los dos primeros 0 tuvieron que ser reemplazados
Jings

1
¿Por qué no charAt? ¿Por qué los corchetes? ¿Por qué una extensión prototipo? 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

Aquí hay uno que no asume que la entrada es a string, usa substringy viene con un par de pruebas unitarias:

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
Esto no funciona como se esperaba y también es realmente ineficiente.
Ry-

0

Desde la implementación de Javascript de trim ()> que elimina espacios iniciales y finales de las cadenas. Aquí hay una implementación alterada de la respuesta a esta pregunta.

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

Implementación original para esto en JS

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

No consideramos que la confusión sea un problema de implementación, sin embargo, a menudo se atribuye a una deficiencia de capacidad para mantenerse al día con las variables que su entorno le presenta. En este caso, sus conexiones neuronales son incapaces de manejar la comprensión necesaria de esta adopción alterada de una implementación de la función js nativa como respuesta a la pregunta original.
fino
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.