2010-08-02 33 views
13

tôi đang tìm kiếm một chức năng cắt trong JavaScript mà không tồn tại và một số mã trên Googling cho thấy rằng việc sử dụng:cắt trong javascript? mã này đang làm gì?

function trimStr(str) { 
    return str.replace(/^\s+|\s+$/g, ''); 
} 

Tôi muốn biết làm thế nào str.replace(/^\s+|\s+$/g, '') công trình. Tôi hiểu rằng đây là một số hình thức biểu hiện chính quy nhưng không biết nó đang làm gì.

Trả lời

30

/^\s+|\s+$/g tìm kiếm khoảng trắng từ đầu hoặc cuối chuỗi. Biểu thức có thể được chia thành hai phần, ^\s+\s+$ được phân tách bằng | (OR). Phần đầu tiên bắt đầu từ đầu chuỗi (^) và bao gồm nhiều ký tự khoảng trắng có thể (\s+). Phần thứ hai cũng giống nhau nhưng ngược lại và cuối cùng sử dụng ký hiệu đô la ($).

Trong tiếng Anh đơn giản, các biểu thức chính quy sẽ đi như thế này:

Tìm càng nhiều ký tự khoảng trắng từ đầu của chuỗi như ký tự khoảng trắng càng tốt hoặc càng nhiều từ ngày kết thúc càng tốt.

Lưu ý rằng \s khớp với dấu cách, tab và ngắt dòng.

Phần /g ở cuối cho phép tìm kiếm toàn cầu, cho phép nhiều thay thế (ví dụ: không chỉ bắt đầu, mà còn ở cuối chuỗi).

+0

có mọi thứ ngoại trừ/g.Bạn có thể giải thích thêm xung quanh rằng bất kỳ ví dụ khác –

+0

tôi đang bối rối với "/ g một phần ở cuối cho phép tìm kiếm toàn cầu" tại sao chúng ta cần nó ở đây. Vì chúng tôi đã bao gồm điều kiện để bắt đầu và kết thúc chuỗi –

+5

@sushil, tại đây cờ toàn cầu có nghĩa là có thể có nhiều hơn một thay thế. Không có nó, nó sẽ chỉ thay thế trận đấu đầu tiên. Ví dụ. '" foo ".replace (/^\ s + | \ s + $ /," ")' (không toàn cầu) là '" foo "' –

4

^ là đầu chuỗi và $ là kết thúc. \s có nghĩa là ký tự khoảng trắng (trong JavaScript có nghĩa là tab, tab dọc, nguồn cấp dữ liệu, không gian, không gian ngắt, dấu thứ tự byte, dấu phân cách không gian Unicode (loại Z), nguồn cấp dữ liệu, trả lại dòng, dấu tách dòng hoặc phân đoạn đoạn) và + có nghĩa là 1 hoặc nhiều hơn. | là sự thay đổi, một sự lựa chọn giữa hai khả năng. g là cờ toàn cầu. Vì vậy, các regex có nghĩa là sự bắt đầu, sau đó một hoặc nhiều khoảng trắng, hoặc một hoặc nhiều khoảng trắng, sau đó kết thúc. Sau đó, chúng tôi thay thế tất cả các kết quả phù hợp (vì nó toàn cục) bằng chuỗi rỗng.

Bạn có thể quan tâm đến điều này blog post, trong đó phân tích chi tiết hơn bạn có thể cần :) những thuận và chống của các chức năng cắt khác nhau.

+1

'\ s' có nghĩa là nhiều hơn một khoảng trắng (có nghĩa là khoảng trắng). Trong JS nó bao gồm các ký tự '[\ r \ n \ t]'. –

+2

@Andy, cảm ơn, tôi đã thực sự nhận thức được điều đó, nhưng không cụm từ nó tốt. Tôi không có ý nói nó chỉ là ASCII 0x20 (không gian thực). Tôi đã làm rõ; nó thực sự là một vài nhân vật hơn bạn nói. –

+0

cũng được thực hiện để làm rõ thêm, tôi chỉ bao gồm các nhân vật mà tôi đã hoàn toàn chắc chắn. Tuy nhiên, bạn nên biết rằng '\ s' chỉ được chỉ định để phù hợp với BOM như của ECMA-262 phiên bản thứ 5 (nó không được bao gồm trong ấn bản thứ 3). Ngoài ra, trong Internet Explorer lên tới phiên bản 8, các ký tự chính xác khớp với '\ s' tương đương với' [\ f \ n \ r \ t \ v] '- vì vậy danh sách của bạn không phải là một tham chiếu lý tưởng cho toàn bộ chéo tính tương thích của trình duyệt web. –