首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

JavaScript split 正則陷阱:/[^\,]+/g 分割輸出為何是「-,-,-,-」?

     編輯:程式設計疑難解答

代碼


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)) 直接看陣列內容。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved