2013-02-16 41 views
47

Tôi thường sử dụng đoạn mã sau trong JavaScript để chia chuỗi bằng khoảng trắng.Làm cách nào để tách chuỗi bằng khoảng trắng và bỏ qua khoảng trắng đầu và cuối vào một mảng từ bằng cụm từ thông dụng?

"The quick brown fox jumps over the lazy dog.".split(/\s+/); 
// ["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog."] 

Điều này tất nhiên hoạt động ngay cả khi có nhiều ký tự khoảng trắng giữa các từ.

"The quick brown fox  jumps over the lazy dog.".split(/\s+/); 
// ["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog."] 

Vấn đề là khi tôi có một chuỗi có đứng đầu hoặc cuối trong trường hợp này các mảng kết quả của chuỗi sẽ bao gồm một nhân vật trống ở đầu và/hoặc kết thúc của mảng.

" The quick brown fox jumps over the lazy dog. ".split(/\s+/); 
// ["", "The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog.", ""] 

Đây là một nhiệm vụ tầm thường để loại bỏ các ký tự trống đó, nhưng tôi muốn chăm sóc điều này trong cụm từ thông dụng nếu có thể. Có ai biết biểu thức chính quy nào tôi có thể sử dụng để hoàn thành mục tiêu này không?

+0

Ngựa cho các khóa học. 'split' được sử dụng để * tách * một chuỗi, chứ không phải * biến đổi * nó. Xem [cách cắt một chuỗi trong JavaScript?] (Http://stackoverflow.com/questions/498970/how-do-i-trim-a-string-in-javascript). – DCoder

+0

không may javascript không hỗ trợ ** lookbehind ** và ngay cả khi bạn đã sử dụng ** lookbehind **, sẽ có không gian trong phân chia đầu tiên – Anirudha

+0

Tôi chưa bao giờ nghĩ về nó từ góc nhìn đó. Cảm ơn bạn đã chỉ ra điều đó! – natlee75

Trả lời

78

Nếu bạn đang quan tâm nhiều hơn trong các bit mà không phải là khoảng trắng, bạn có thể phù hợp với không khoảng trắng thay vì tách trên khoảng trắng.

" The quick brown fox jumps over the lazy dog. ".match(/\S+/g); 

Lưu ý rằng lợi nhuận sau null:

" ".match(/\S+/g) 

Vì vậy, mô hình tốt nhất để học là:

str.match(/\S+/g) || [] 
+7

Xem ra, ''' .match (/ \ S +/g)' trả về 'null' thay vì' [] '! – Andy

31

" The quick brown fox jumps over the lazy dog. ".trim().split(/\s+/);

+3

Cảm ơn bạn đã đề xuất. Tôi thực sự sẽ đi tuyến đường này cho đến khi tôi nhớ rằng nó yêu cầu một trình duyệt hỗ trợ JavaScript 1.8. Điều đó tốt cho đa số người dùng của chúng tôi, nhưng chúng tôi vẫn hỗ trợ các trình duyệt cũ hơn như Internet Explorer 7 và 8 có các công cụ JavaScript không bao gồm chức năng này. – natlee75

+4

Xem ra, ''' .trim(). Split (/ \ s + /)' trả về '[" "]'! – Andy

9

Thay vì tách tại chuỗi khoảng trắng, bạn có thể phù hợp với bất kỳ không khoảng trắng trình tự:

" The quick brown fox jumps over the lazy dog. ".match(/\S+/g) 
Các vấn đề liên quan