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
global
cờ
/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 ( comma
hoặ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ư*
.