2012-05-16 45 views
5

Tôi gặp sự cố khi tạo cụm từ thông dụng có thể tách ra các số 0 đứng đầu từ các số được biểu thị dưới dạng chuỗi. Xin lỗi nhưng parseFloat không phải là những gì tôi đang tìm kiếm vì tôi sẽ xử lý các số có hơn 30 chữ số thập phân.Sử dụng Regex để tạo thành một số không có số 0 đứng đầu trong Javascript

biểu thức chính quy hiện tại của tôi là

/(?!-)?(0+)/; 

Dưới đây là các trường hợp thử nghiệm của tôi. http://jsfiddle.net/j9mxd/1/

$(function() { 
    var r = function(val){ 
     var re = /(?!-)?(0+)/; 
     return val.toString().replace(re, ''); 
    }; 
    test("positive", function() { 
     equal(r("000.01"), "0.01"); 
     equal(r("00.1"), "0.1"); 
     equal(r("010.01"), "10.01"); 
     equal(r("0010"), "10"); 
     equal(r("0010.0"), "10.0"); 
     equal(r("10010.0"), "10010.0"); 
    }); 
    test("negative", function() { 
     equal(r("-000.01"), "-0.01"); 
     equal(r("-00.1"), "-0.1"); 
     equal(r("-010.01"), "-10.01"); 
     equal(r("-0010"), "-10"); 
     equal(r("-0010.0"), "-10.0"); 
     equal(r("-10010.0"), "-10010.0");   
    }); 
}); 

Tại sao các trường hợp thử nghiệm của tôi không được chuyển?

+0

Vui lòng cung cấp một số cái nhìn sâu sắc vào những gì đang thực sự xảy ra sai lầm, và hỏi một câu hỏi thực tế có thể không làm tổn thương một trong hai. –

+0

Câu hỏi đặt ra là "tại sao các bài kiểm tra của tôi không vượt qua?" –

+0

Tất cả chúng? OK ... –

Trả lời

4

này kết thúc tất cả các trường hợp của bạn

var re = /^(-)?0+(?=\d)/; 
return val.toString().replace(re, '$1'); 

^ trận đấu trên sự bắt đầu của chuỗi.

(-)? khớp với tùy chọn - điều này sẽ được chèn lại vào chuỗi thay thế.

(0+)(?=\d) khớp với chuỗi 0 có chữ số sau. (?=\d) là một lookahead assertion, nó không khớp nhưng đảm bảo rằng một chữ số theo sau các số 0 đứng đầu.

+0

Cái gì? = Nghĩa là gì? –

+0

@LarryBattle Tôi đã thêm một lời giải thích – stema

1

Bạn có thể sử dụng như sau:

var r = function(val) { 
    var re = /(-)?0*(\d.*)/; 
    var matches = val.toString().match(re); 
    return (matches[1] || '') + matches[2]; 
}; 
2

này đi xét nghiệm của bạn, và là tương đối dễ dàng để đọc:

var r = function(val){ 
    var re = /^(-?)(0+)(0\.|[1-9])/; 
    return val.toString().replace(re, '$1$3'); 
}; 
+0

Rất cleaver bằng cách sử dụng các tài liệu tham khảo trở lại. –

+0

một lookahead là một giải pháp tốt hơn - tôi đã có thể chỉnh sửa câu trả lời nhưng stema đề xuất nó đầu tiên. – AD7six

Các vấn đề liên quan