Xóa ký tự đầu tiên của chuỗi trong Javascript


505

Tôi muốn xóa ký tự đầu tiên của chuỗi, nếu ký tự đầu tiên là 0. Số 0 có thể ở đó nhiều lần.

Có một chức năng đơn giản để kiểm tra ký tự đầu tiên và xóa nó nếu nó là 0?

Ngay bây giờ, tôi đang thử nó với slice()chức năng JS nhưng nó rất khó xử.

Câu trả lời:


763

Bạn có thể xóa ký tự đầu tiên của chuỗi bằng cách sử dụng substr:

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

Để xóa tất cả 0 ở đầu chuỗi:

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

11
@Stephen: Trong trường hợp này, nó sẽ không tạo ra sự khác biệt vì charAtluôn trả về một chuỗi, ngay cả khi chỉ mục vượt quá chỉ mục của ký tự cuối cùng, do đó không có sự ép buộc nào được thực hiện và thuật toán kết thúc giống hệt nhau. Nhưng tôi thích ===hơn ==ngay cả khi nó không tạo ra sự khác biệt. ;)
dùng113716

4
@Hejner: Nếu các loại giống nhau, như chúng luôn có trong trường hợp này, thì =====thực hiện chính xác các bước tương tự (ít nhất là theo thông số kỹ thuật), vì vậy không có lý do gì để mong đợi loại này hoạt động tốt hơn loại kia .
Tim xuống

2
@MiguelCoder. Theo thông số kỹ thuật, các bước là như nhau (tất nhiên việc triển khai trình duyệt có thể khác nhau). Đọc nó nếu bạn không tin tôi.
Tim Down

3
@ReallyNiceCode đặt sang một bên thực tế rằng câu hỏi đã được hỏi hơn 8 năm trước. Nó đã được tuyên bố "Số 0 có thể ở đó nhiều lần." và người hỏi đã chấp nhận giải pháp của tôi.
Bóng mờ

6
Mặc dù vẫn còn hiệu lực, bạn nên cập nhật trả lời của mình, bằng cách thay thế substrbằng substring. Kiểm tra MDN: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/
Soul Reaver

186

Mã rất dễ đọc là sử dụng .substring()với một bắt đầu được đặt thành chỉ mục của ký tự thứ hai (1) (ký tự đầu tiên có chỉ số 0). Tham số thứ hai của .substring()phương thức thực sự là tùy chọn, vì vậy bạn thậm chí không cần gọi .length()...

TL; DR: Xóa ký tự đầu tiên khỏi chuỗi:

str = str.substring(1);

...Có, nó là đơn giản...

Xóa một số ký tự cụ thể:

Như @Shaded đề xuất, chỉ cần lặp lại điều này trong khi ký tự đầu tiên của chuỗi của bạn là ký tự "không mong muốn" ...

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()đấu .substring()với.substr()

Trích dẫn từ (và nhiều hơn về điều đó trong) Sự khác biệt giữa String.slice và String.sub chuỗi là gì?

Ông cũng chỉ ra rằng nếu các tham số để lát là âm, chúng tham chiếu chuỗi từ cuối. Chuỗi con và chất nền khôngn.



61

Cách dễ nhất để loại bỏ tất cả các 0s hàng đầu là:

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

Nếu chỉ tước một 0ký tự dẫn đầu , như câu hỏi ngụ ý, bạn có thể sử dụng

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

26

Bạn có thể làm điều đó với phương thức chuỗi con :

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

Dành cho tất cả mọi người 0: http://jsfiddle.net/An4MY/

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

Vâng, điều này sẽ hoạt động, nếu chỉ có một 0 trong chuỗi. Nhưng tôi cũng cần nó nếu Chuỗi trông giống như var s = "00test0"; sau đó chỉ có hai số 0 đầu tiên phải được thay thế
Jings

1
Tại sao không charAt? Tại sao dấu ngoặc? Tại sao một phần mở rộng nguyên mẫu? Kinh quá.
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

Đây là một cái không cho rằng đầu vào là string, sử dụng substringvà đi kèm với một vài thử nghiệm đơn vị:

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
Điều này không thực hiện như mong đợi và cũng thực sự không hiệu quả.
Ry-

0

Từ việc triển khai Javascript của trim ()> sẽ loại bỏ và dẫn đầu hoặc kết thúc khoảng trắng khỏi chuỗi. Dưới đây là một triển khai thay đổi của câu trả lời cho câu hỏi này.

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

Triển khai ban đầu cho điều này trên JS

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

chúng tôi không coi sự nhầm lẫn là một vấn đề triển khai, tuy nhiên, nó thường được quy cho sự thiếu hụt năng lực để theo kịp các biến mà môi trường của bạn trình bày cho bạn. Trong trường hợp này, các kết nối thần kinh của bạn không có khả năng xử lý sự hiểu biết cần thiết về việc áp dụng thay đổi này của việc thực hiện chức năng js gốc như một câu trả lời cho câu hỏi ban đầu.
fino
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.