2014-06-18 11 views
6

Tôi có một vài chuỗi như vậy:Remove ở đầu và đuôi số không từ một chuỗi

str1 = "00001011100000"; // 10111 
str2 = "00011101000000"; // 11101 
... 

Tôi muốn dải số không hàng đầu và đóng cửa từ mọi chuỗi sử dụng regex với ONE hoạt động.

Cho đến nay tôi đã sử dụng hai chức năng khác nhau nhưng tôi muốn kết hợp chúng với nhau:

str.replace(/^0+/,'').replace(/0+$/,''); 

Trả lời

15

Bạn chỉ có thể kết hợp cả hai regex của bạn sử dụng một OR khoản (|):

var r = '00001011100000'.replace(/^0+|0+$/g, ""); 
//=> "10111" 

cập nhật: Các giải pháp regex phía trên thay thế 0 bằng một chuỗi rỗng. Để ngăn chặn vấn đề này sử dụng regex này:

var repl = str.replace(/^0+(\d)|(\d)0+$/gm, '$1$2'); 

RegEx Demo

RegEx Breakup:

  • ^: khẳng định bắt đầu
  • 0+: Phù hợp với một hoặc nhiều zero
  • (\d): Tiếp theo là một chữ số được chụp trong chụp nhóm # 1
  • |: HOẶC
  • (\d): Phù hợp với một chữ số đó được thể hiện trong nhóm chụp # 2
  • 0+: Tiếp theo là thêm một hoặc zero
  • $: Khẳng định cuối

Thay thế:

Ở đây chúng tôi đang sử dụng hai tham chiếu ngược của phần kéo chụp nhóm:

$1$2 

Về cơ bản, hãy đặt chữ số sau số 0 và số 0 trước khi quay số lại.

+1

Tôi hoàn toàn quên thông số chung. Cảm ơn! –

+2

Tôi biết đây là một chủ đề khá cũ, nhưng nó vẫn xuất hiện trong tìm kiếm của google khi cố gắng cắt các số 0 đầu/cuối. Trong khi điều này làm việc hầu hết thời gian, nó không xử lý đúng một giá trị '0'. Nó chỉ cắt nó hoàn toàn, trong khi 0 về mặt kỹ thuật là một số hợp lệ. – dvsoukup

+0

Đó là điểm tốt @dvsoukup. Tôi đã cập nhật câu trả lời. – anubhava

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