2015-12-15 19 views
7

Kết quả mã sau vào yếu tố không xác định ở giữajavascript yếu tố xác định xảy ra trong regex chia

"Hello World\n\nhello world".split(/\n(\n|\t|\s)*?\n/) 
"Hello World\n\nhello world".split(/\n(\n|\t|\s)*\n/) 

Đầu ra là

["Hello World", undefined, "hello world"] 

tôi muốn chia nếu có hai nhân vật dòng mới với bất kỳ số dòng mới hoặc dấu cách hoặc ký tự tab giữa chúng miễn là chúng không phải là bảng chữ cái hoặc ký hiệu hoặc số.

+1

tôi nghĩ rằng bạn muốn '/ \ n \ s * \ n /' –

Trả lời

7

Nó bởi vì khi bạn sử dụng một nhóm chụp trong một mô hình tách, javascript bao gồm các nội dung của nhóm chụp trong kết quả. Vì, nhóm chụp không được để trống, nó không bao giờ được lặp lại, đó là lý do tại sao bạn nhận được "không xác định" và không phải là một chuỗi rỗng.

Để ngăn chặn điều này, sử dụng một tổ chức phi chụp nhóm hay lớp nhân vật:

"Hello World\n\nhello world".split(/\n(?:\n|\t|\s)*\n/) 
"Hello World\n\nhello world".split(/\n\s*\n/) # (\t and \n are already included in \s) 

Lưu ý: Nếu bạn muốn loại bỏ đầu và đuôi không gian quá, bạn có thể sử dụng:

/(?:[^\S\n]*\n){2}\s*/ 
+0

haha ​​.. tôi hiểu tại sao tôi lại nhận được nó. –

4

Sử dụng non-capturing group để ngăn không cho nội dung của (các) nhóm chụp được đưa vào.

/\n(?:\n|\t|\s)*?\n/ 

Nó sẽ trở lại:

"Hello World\n\nhello world".split(/\n(?:\n|\t|\s)*?\n/); 
// ["Hello World", "hello world"] 
Các vấn đề liên quan