Excluir o primeiro caractere de uma string em Javascript

505

Quero excluir o primeiro caractere de uma string, se o primeiro caractere for um 0. O 0 pode estar lá mais de uma vez.

Existe uma função simples que verifica o primeiro caractere e o exclui se for 0?

No momento, estou tentando com a slice()função JS , mas é muito estranho.

Jings
fonte

Respostas:

763

Você pode remover o primeiro caractere de uma sequência usando substr:

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

Para remover todos os 0s no início da string:

var s = "0000test";
while(s.charAt(0) === '0')
{
 s = s.substr(1);
}
Sombreado
fonte
11
@ Stephen: Nesse caso, não faria diferença, porque charAtsempre retorna uma string, mesmo que o índice exceda o índice do último caractere, para que não haja coerção de tipo e o algoritmo seja idêntico. Mas prefiro ===mais do que ==quando não faz diferença. ;)
user113716
4
@Hejner: Se os tipos são os mesmos, como sempre seriam nesse caso, ===e ==executam exatamente os mesmos passos (de acordo com as especificações, pelo menos), então não há razão para esperar que um tenha um desempenho melhor que o outro .
Tim Baixo
2
@MiguelCoder. De acordo com as especificações, as etapas são as mesmas (as implementações do navegador podem diferir, é claro). Leia se você não acredita em mim.
Tim
3
@ReallyNiceCode deixando de lado o fato de que a pergunta foi feita há mais de 8 anos. Foi declarado "O 0 pode estar lá mais de uma vez". e o autor da pergunta aceitou minha solução.
Sombreado
6
Embora ainda seja válido, você deve atualizar sua resposta, substituindo substrpor substring. Verifique o MDN: developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/…
Soul Reaver
186

Um código muito legível deve ser usado .substring()com um início definido para o índice do segundo caractere (1) (o primeiro caractere tem o índice 0). O segundo parâmetro do .substring()método é realmente opcional, então você nem precisa chamar.length() ...

TL; DR: remova o primeiro caractere da sequência:

str = str.substring(1);

...Sim, é simples assim...

Removendo alguns caracteres específicos:

Como o @Shaded sugeriu, basta fazer um loop enquanto o primeiro caractere da sua string é o "indesejado" ...

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

Cite de (e mais sobre isso em) Qual é a diferença entre String.slice e String.substring?

Ele também aponta que, se os parâmetros a serem fatiados são negativos, eles referenciam a string do final. Substring e substr não.

jave.web
fonte
84

Use .charAt()e.slice() .

Exemplo: http://jsfiddle.net/kCpNQ/

var myString = "0String";

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

Se houver vários 0caracteres no início, você poderá alterar if()parawhile() .

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

var myString = "0000String";

while( myString.charAt( 0 ) === '0' )
    myString = myString.slice( 1 );
user113716
fonte
61

A maneira mais fácil de remover todos os 0s principais é:

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

Se apenas retirar um único 0caractere principal , como a pergunta implica, você poderá usar

s = s.replace(/^0/, "");
Tim Down
fonte
26

Você pode fazer isso com o método de substring :

let a = "My test string";

a = a.substring(1);

console.log(a); // y test string
Andrew
fonte
7
var s = "0test";
if(s.substr(0,1) == "0") {
    s = s.substr(1);
}

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

String.prototype.ltrim0 = function() {
 return this.replace(/^[0]+/,"");
}
var s = "0000test".ltrim0();
zsalzbank
fonte
Sim, isso funcionaria, se apenas um 0 estiver na string. Mas eu preciso também se a String se parece com var s = "00test0"; em seguida, apenas os dois primeiros 0 teve de ser substituído
Jings
1
Por que não charAt? Por que os suportes? Por que uma extensão de protótipo? Que nojo.
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
fonte
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
fonte
3

Aqui está um que não assume que a entrada é a string, usa substringe vem com alguns testes de unidade:

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
fonte
2

tentar

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

Kamil Kiełczewski
fonte
0
var test = '0test';
test = test.replace(/0(.*)/, '$1');
kelloti
fonte
2
Isso não funciona como o esperado e também é realmente ineficiente.
Ry-
0

Na implementação Javascript de trim ()> que remove e espaços iniciais ou finais das strings. Aqui está uma implementação alterada da resposta para esta pergunta.

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

Implementação original para isso em JS

string.trim():
if (!String.prototype.trim) {
 String.prototype.trim = function() {
  return this.replace(/^\s+|\s+$/g,'');
 }
}
fino
fonte
não consideramos a confusão um problema de implementação; no entanto, geralmente é atribuído a uma deficiência de capacidade de acompanhar as variáveis ​​que seu ambiente apresenta a você. Nesse caso, suas conexões neurais são incapazes de lidar com o entendimento necessário dessa adoção alterada de uma implementação da função js nativa como resposta à pergunta original.
fino