2012-02-16 33 views

Trả lời

30

Bạn cần sửa đổi /g để thay thế mỗi xảy ra:

"a100.dfwe".replace(/[^0-9]+/g, ""); 

Tôi cũng loại bỏ các dư thừa i modifier và chụp không sử dụng tiểu biểu niềng răng cho bạn. Như những người khác đã chỉ ra, bạn cũng có thể sử dụng \D để rút ngắn nó thậm chí còn hơn nữa:

"a100.dfwe".replace(/\D+/g, ""); 
+0

cảm ơn bạn, và chính xác những gì không dấu "+" đứng cho? –

+0

@PrakashRaman: có nghĩa là * khớp một hoặc nhiều ký tự trước *. Nó không cần thiết, nhưng nó sẽ làm tăng hiệu suất của biểu thức chính quy một chút bằng cách giảm số lượng các thay thế được yêu cầu. –

+0

(Về mặt kỹ thuật câu trả lời này, trả lời câu hỏi, nhưng không thành công trên phao) "123.456px" .replace (/ \ D +/g, ""); -> 123456 –

17

\D có nghĩa là “không chữ số”:

"a100.dfwe".replace(/\D/g, "") 
+0

Hình thức nhỏ gọn nhất. – Oybek

1

Nó không làm việc vì các lớp nhân vật [^0-9] (= bất kỳ thứ gì trừ chữ số) với công cụ sửa đổi lặp lại + sẽ chỉ khớp với một chuỗi ký tự không phải là số, chẳng hạn như "aaa". Đối với mục đích của bạn, hãy sử dụng công cụ sửa đổi /g như những mục đích khác (để thay thế tất cả các trận đấu trên toàn cầu) và bạn cũng có thể sử dụng lớp ký tự được xác định trước \D (= không phải chữ số) thay vì [^0-9]. regex ngắn gọn hơn /\D+/.

+0

để hiểu nó tốt hơn không nên là "a" và ".dfwe" đến dưới một nhóm +, bởi vì đó là 1 và nhiều hơn nữa. –

+3

'\ D +' nói "tìm kiếm một hoặc nhiều chữ số", trong khi '(\ D) +' tìm kiếm một hoặc nhiều lần lặp lại của cùng một chữ số, không phải là những gì bạn muốn. Bây giờ, cho dù bạn có '/ \ D/g' (thay thế từng chữ số không), hay'/\ D +/g' (thay thế mọi dãy số không phải chữ số) không thực sự quan trọng ngoại trừ khả năng thực hiện , điều này sẽ không đáng chú ý trừ khi bạn xử lý hàng chục nghìn chuỗi. – fanaugen

+0

ah cảm ơn rất nhiều. Điều đó giải thích mọi thứ một cách hoàn hảo với tôi. Cảm ơn ! –

2

Điều gì về số âm:

Sử dụng ví dụ của Andy E hoạt động trừ khi bạn có số âm. Sau đó, nó loại bỏ biểu tượng '-' cũng để lại cho bạn một số luôn luôn dương (có thể là ok). Tuy nhiên nếu bạn muốn giữ lại số nhỏ hơn 0 Tôi xin đề nghị như sau:

"a-100.dfwe".replace(/(?!-)[^0-9.]/g, "") //equals -100 

Nhưng hãy cẩn thận, vì điều này sẽ để lại tất cả '-' biểu tượng, đem lại cho bạn một lỗi nếu văn bản của bạn trông giống như "-a- 100.dfwe "

+0

Anh ấy không thực sự nói về các con số, chỉ là các nhóm chữ số. Dù sao, regex của bạn vẫn khớp với '-' bởi vì nó không phải ở đầu chuỗi. –

0

Dựa trên câu trả lời của @ user3324764 - Tạo một hàm mẫu và chuyển số thành số.

String.prototype.extractNumber = function() 
{ 
    return Number(this.replace(/(?!-)[^0-9.]/g, "")); 
}; 

Ví dụ:

"123.456px".extractNumber(); // 123.456 
Các vấn đề liên quan