Làm cách nào để chia một chuỗi theo khoảng trắng và bỏ qua khoảng trắng ở đầu và cuối thành một mảng từ sử dụng biểu thức chính quy?


77

Tôi thường sử dụng mã sau trong JavaScript để chia một chuỗi theo khoảng trắng.

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

Tất nhiên, điều này 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ó khoảng trắng ở đầu hoặc ở cuối, trong trường hợp đó mảng chuỗi kết quả sẽ bao gồm một ký tự trống ở đầu và / hoặc cuối của mảng.

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

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


Ngựa cho các khóa học. splitđược sử dụng để tách một chuỗi, không làm thay đổi nó. Xem cách cắt một chuỗi trong JavaScript? .
DCoder

hỗ trợ doesnt may javascript lookbehind và thậm chí nếu bạn đã sử dụng lookbehind , sẽ có không gian trong phân chia đầu tiên
Anirudha

Tôi chưa bao giờ nghĩ về nó từ góc độ đó. Cảm ơn vì đã chỉ ra điều đó!
natlee75 17/02/13

bạn không thể làm một trim () trước khi tách?
Jacques Koorts

Câu trả lời:


120

Nếu bạn quan tâm hơn đến các bit không phải là khoảng trắng, bạn có thể đối sánh với các bit không phải là 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 các kết quả sau trả về null:

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

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

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

10
Xem ra, ' '.match(/\S+/g)trả lại nullthay vì []!
Andy

Tôi tự hỏi giải pháp của ai nhanh hơn của bạn hoặc của @Josh (nếu chúng tôi xử lý trường hợp [""]).
ibodi

49

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


3
Cám ơn vì sự gợi ý. Tôi thực sự sẽ đi theo con đường này cho đến khi tôi nhớ rằng nó yêu cầu 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ông cụ JavaScript không bao gồm chức năng này.
natlee75 17/02/13

9
Xem ra, ' '.trim().split(/\s+/)trở lại [""]!
Andy

Tôi tự hỏi giải pháp của ai nhanh hơn của bạn (nếu chúng tôi xử lý trường hợp [""]) hoặc của @kennebec
ibodi

16

Thay vì tách theo các chuỗi khoảng trắng, bạn có thể so khớp bất kỳ chuỗi nào không có khoảng trắng:

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

0

Không thanh lịch như những mã khác nhưng rất dễ hiểu:

    countWords(valOf)
    {
        newArr[];
        let str = valOf;
        let arr = str.split(" ");

        for (let index = 0; index < arr.length; index++) 
       {
           const element = arr[index];
           if(element)
           {
              newArr.push(element);
           }
       }
       const NumberOfWords = newArr.length;

       return NumberOfWords;
   }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.