Câu trả lời ngắn gọn: Sử dụng m = s.match(/[^ ,]/g);
RE của bạn không hoạt động như mong đợi, bởi vì nhóm cuối cùng khớp với trận đấu gần đây nhất (=
c). Nếu bạn bỏ qua
{1,}$, kết quả trùng khớp sẽ được trả về
" a , b ", "a", "b". Tóm lại, RegExp của bạn trả về nhiều kết quả phù hợp như các nhóm được chỉ định
trừ khi bạn sử dụng
globalcờ
/g. Trong trường hợp này, danh sách trả về giữ các tham chiếu đến tất cả các chuỗi con phù hợp.
Để đạt được hiệu quả của bạn, hãy sử dụng:
m = s.replace(/\s*(,|^|$)\s*/g, "$1");
Sự thay thế này thay thế mọi dấu phẩy ( ,), đầu ( ^) và cuối ( $), được bao quanh bởi khoảng trắng, bằng ký tự gốc ( commahoặc không có gì).
Nếu bạn muốn lấy một mảng, hãy sử dụng:
m = s.replace(/^\s+|\s+$/g,"").split(/\s*,\s*/);
RE này cắt xén chuỗi (loại bỏ tất cả khoảng trắng ở đầu và cuối, sau đó chia chuỗi theo <any whitespace>,<any whitespace>. Lưu ý rằng các ký tự khoảng trắng cũng bao gồm các dòng và tab mới. Nếu bạn muốn chỉ sử dụng khoảng trắng, hãy sử dụng dấu cách ( ) thay vì \s.
{0,}cũng giống như*.