2012-02-22 7 views
8

Tôi cần một mã thông báo cho một chuỗi có khoảng trống trắng tùy ý giữa các từ sẽ tạo ra một mảng các từ không có chuỗi con trống.Tách chuỗi bằng cách sử dụng khoảng trắng trong Javascript?

Ví dụ, cho một chuỗi:

" I dont know what you mean by glory Alice said." 

tôi sử dụng:

str2.split(" ") 

này cũng trả về rỗng tiểu chuỗi:

["", "I", "dont", "know", "what", "you", "mean", "by", "glory", "", "Alice", "said."] 

Làm thế nào để lọc ra các chuỗi rỗng từ một mảng?

Trả lời

15

Bạn có thể thậm chí không cần phải lọc, chỉ chia nhỏ sử dụng Regular Expression này:

" I dont know what you mean by glory Alice said.".split(/\b\s+/) 
+0

Off-chủ đề: '\ b' trong regex gì nghĩa là gì? –

+3

Khớp một ranh giới từ, chẳng hạn như dấu cách, ký tự dòng mới, ký tự dấu chấm câu hoặc kết thúc chuỗi (https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions). Có thể không phải là Regex hoàn hảo nhưng cho ví dụ đó nó hoạt động. – Daff

+0

@Mustafa yeah, tôi biết. Nhưng nó chỉ là một sự tò mò. –

7

Bạn nên cắt chuỗi trước khi sử dụng phân chia.

var str = " I dont know what you mean by glory Alice said." 
var trimmed = str.replace(/^\s+|\s+$/g, ''); 
trimmed = str.split(" ") 
2

Tôi khuyên bạn nên .match:

str.match(/\b\w+\b/g); 

này phù hợp với từ giữa ranh giới từ, vì vậy tất cả các không gian không phù hợp và do đó không được đưa vào mảng kết quả.

+0

Điều này làm việc tốt hơn: >>> str2 "Humpty Dumpty mỉm cười khinh miệt Tất nhiên bạn không - cho đến khi tôi nói với bạn tôi có nghĩa là theres một tốt đẹp đối số knock-down cho bạn! " Sử dụng: str3 = str2.phù hợp (/ \ b \ w + \ b/g); Kết quả bằng: >>> str3 ["Humpty", "Dumpty", "smile", "contemptuously", "Of", "course", "you", "dont", "till", " Tôi "," nói "," bạn "," tôi "," có nghĩa là "," theres "," a "," nice "," knock "," down "," argument "," for "," you " ] Vì vậy, w + các trận đấu cũng "-" – dokondr

+1

@dokondr: Bạn tính số ký tự từ là gì? Nếu nó là mọi thứ ngoại trừ không gian, bạn có thể chỉ muốn sử dụng '[^]' thay cho '\ w'. – pimvdb

7
str.match(/\S+/g) 

trả về một danh sách các trình tự không gian ["I", "dont", "know", "what", "you", "mean", "by", "glory", "Alice", "said."]

str.match(/\w+/g) 

trả về một danh sách tất cả các từ (lưu ý rằng điều này bao gồm các dấu chấm trong "nói."): ["I", "dont", "know", "what", "you", "mean", "by", "glory", "Alice", "said"]

docs trên match()

+1

Câu trả lời hay. Đối với tham chiếu của người khác, '/ S + /' khớp với các nhóm ký tự ** không ** khoảng trắng, trong khi '/ w + /' khớp các nhóm ký tự ** là ** chữ số và dấu gạch dưới. Đó là lý do tại sao ký tự dấu chấm ('.') khớp với nhau nhưng không phải là ký tự còn lại. –

0

tôi nghĩ rằng chuỗi con trống xảy ra vì có nhiều khoảng trắng bạn có thể sử dụng thay thế() trong vòng lặp for để thay thế nhiều ITE-không gian với một màu trắng-không gian duy nhất sau đó chia() để phân chia các chương trình sử dụng một không gian màu trắng duy nhất như thế này:

// getting full program from div 
 
var program = document.getElementById("ans").textContent; 
 
//removing multiple spaces 
 
var res = program.replace(" ", " "); 
 
for (i = 0; i <= program.length; i++) { 
 
    var res = res.replace(" ", " "); 
 
} 
 
// spliting each word using space as saperator 
 
var result = res.split(" ");