代碼
var colorText = "red,blue,green,yellow";
var splittedText = colorText.split(/[^\,]+/g);
return splittedText.join("-"); // 輸出:-,-,-,-
正則解析:/[^\,]+/g
[^\,]:匹配**非逗號**的任意字元。
+:匹配 1 次或多次。
g:全域匹配。
- 意義:**以「一個或多個非逗號字元」作為分隔符**。
分割過程逐步演示
原字串: r e d , b l u e , g r e e n , y e l l o w
分隔符匹配:[red] [,][blue] [,][green] [,][yellow]
↑分隔 ↑分隔 ↑分隔 ↑分隔
結果陣列:["", ",", ",", ",", ""]
- 開頭
red 被匹配 → 分隔符前為空字串 ""。
- 逗號
, **不屬於**分隔符 → 成為陣列元素 ","。
- 後續每段顏色同理,結尾
yellow 被匹配 → 結尾空字串 ""。
join("-") 結果
["", ",", ",", ",", ""].join("-")
// → "-,-,-,-"
正確分割逗號的寫法
// 1. 直接用字串分割(最簡單)
colorText.split(","); // ["red", "blue", "green", "yellow"]
// 2. 正則:以逗號為分隔符
colorText.split(/,/g); // 同上
// 3. 正則:分割後去除空白
colorText.split(/\s*,\s*/g); // 支援 "red, blue ,green"
核心教訓
split 的參數是**分隔符**,而非「要保留的內容」。
[^...] 是**排除字元類**,會把「非目標字元」當分隔符,導致目標字元變成陣列元素。
- 除錯技巧:
console.log(colorText.split(/[^\,]+/g)) 直接看陣列內容。