Hapus karakter pertama sebuah string dalam Javascript

505

Saya ingin menghapus karakter pertama dari sebuah string, jika karakter pertama adalah 0. 0 dapat berada di sana lebih dari sekali.

Apakah ada fungsi sederhana yang memeriksa karakter pertama dan menghapusnya jika itu adalah 0?

Saat ini, saya sedang mencoba dengan slice()fungsi JS tetapi sangat canggung.

Jings
sumber

Jawaban:

764

Anda dapat menghapus karakter pertama dari string menggunakan substr:

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

Untuk menghapus semua 0 di awal string:

var s = "0000test";
while(s.charAt(0) === '0')
{
 s = s.substr(1);
}
Diarsir
sumber
11
@Stephen: Dalam hal ini, itu tidak akan membuat perbedaan karena charAtselalu mengembalikan string, bahkan jika indeks melebihi indeks dari karakter terakhir, jadi tidak ada jenis paksaan yang dilakukan, dan algoritma akhirnya menjadi identik. Tapi saya lebih suka ===daripada ==bahkan ketika itu tidak membuat perbedaan. ;)
user113716
4
@ Hansner: Jika tipenya sama, seperti yang selalu terjadi dalam kasus ini, lalu ===dan ==lakukan langkah-langkah yang persis sama (setidaknya sesuai dengan spesifikasi,), jadi tidak ada alasan untuk mengharapkan seseorang berkinerja lebih baik daripada yang lain .
Tim Down
2
@MiguelCoder. Menurut spesifikasi, langkah-langkahnya sama (implementasi browser mungkin berbeda, tentu saja). Bacalah jika Anda tidak percaya kepada saya.
Tim Down
3
@ReallyNiceCode mengesampingkan fakta bahwa pertanyaan itu diajukan lebih dari 8 tahun yang lalu. Dinyatakan "0 itu bisa ada lebih dari sekali." dan si penanya menerima solusi saya.
Shaded
6
Meskipun masih valid, Anda harus memperbarui balasan Anda, dengan menggantinya substrdengan substring. Periksa MDN: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Soul Reaver
186

Kode yang sangat mudah dibaca adalah untuk digunakan .substring()dengan mulai mengatur indeks dari karakter kedua (1) (karakter pertama memiliki indeks 0). Parameter kedua .substring()metode ini sebenarnya opsional, sehingga Anda bahkan tidak perlu menelepon .length()...

TL; DR: Hapus karakter pertama dari string:

str = str.substring(1);

... ya sesederhana itu ...

Menghapus beberapa karakter tertentu:

Seperti yang disarankan oleh @Shaded, lilitkan ini sementara karakter pertama dari string Anda adalah karakter "yang tidak diinginkan" ...

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

Kutipan dari (dan lebih dari itu di) Apa perbedaan antara String.slice dan String.substring?

Dia juga menunjukkan bahwa jika parameter untuk slice negatif, mereka mereferensikan string dari akhir. Substring dan substring tidak.

jave.web
sumber
84

Gunakan .charAt()dan .slice().

Contoh: http://jsfiddle.net/kCpNQ/

var myString = "0String";

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

Jika ada beberapa 0karakter di awal, Anda dapat mengubah if()ke a while().

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

var myString = "0000String";

while( myString.charAt( 0 ) === '0' )
    myString = myString.slice( 1 );
pengguna113716
sumber
61

Cara termudah untuk menghapus semua pemimpin 0adalah:

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

Jika hanya menelanjangi satu 0karakter utama , seperti tersirat dalam pertanyaan, Anda bisa menggunakannya

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

Anda dapat melakukannya dengan metode substring :

let a = "My test string";

a = a.substring(1);

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

Untuk semua 0s: http://jsfiddle.net/An4MY/

String.prototype.ltrim0 = function() {
 return this.replace(/^[0]+/,"");
}
var s = "0000test".ltrim0();
zsalzbank
sumber
Ya, ini akan berhasil, jika hanya satu 0 dalam string. Tetapi saya membutuhkannya juga jika String terlihat seperti var s = "00test0"; maka hanya dua 0 pertama yang harus diganti
Jings
1
Mengapa tidak charAt? Mengapa kurung? Mengapa ekstensi prototipe? 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
sumber
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);

Kekacauan Kekacauan
sumber
3

Inilah salah satu yang tidak menganggap input adalah a string, menggunakan substring, dan dilengkapi dengan beberapa tes unit:

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

mencoba

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

Kamil Kiełczewski
sumber
0
var test = '0test';
test = test.replace(/0(.*)/, '$1');
Kelloti
sumber
2
Ini tidak berfungsi seperti yang diharapkan dan juga sangat tidak efisien.
Ry-
0

Dari implementasi Javascript dari trim ()> yang menghapus dan memimpin atau mengakhiri spasi dari string. Berikut ini adalah implementasi jawaban yang diubah untuk pertanyaan ini.

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

Implementasi asli untuk ini di JS

string.trim():
if (!String.prototype.trim) {
 String.prototype.trim = function() {
  return this.replace(/^\s+|\s+$/g,'');
 }
}
fino
sumber
kami tidak menganggap kebingungan sebagai masalah implementasi, namun, sering dikaitkan dengan kekurangan kapasitas untuk mengikuti variabel yang disajikan lingkungan Anda kepada Anda. Dalam hal ini, koneksi saraf Anda tidak mampu menangani pemahaman yang diperlukan tentang adopsi yang diubah ini dari implementasi fungsi asli js sebagai jawaban untuk pertanyaan awal.
fino