簡體   English   中英

通過正則表達式分割字符串

[英]Splitting string by regular expression

我有以下代碼片段:

var colorText = "red,blue,green,yellow";
var colors3 = colorText.split(/[^\,]+/);
alert(colors3); // ["", ",", ",", ",", ""]

我不明白這里發生了什么。 據我了解,正則表達式將匹配字符串開頭的任何逗號,並且匹配這些字符串中的1個或多個。 當我們提供此正則表達式作為split參數時會發生什么? 當然,如果我們只是嘗試將正則表達式與colorText進行匹配,則不會匹配,因為起始字符不是逗號。 但是提供的用於split的正則表達式如何導致逗號數組和每邊兩個空字符串?

為什么只需要split(',')就需要正則表達式?

 var colorText = "red,blue,green,yellow"; var colors3 = colorText.split(','); console.log(colors3); 

如果要選擇除逗號以外的所有內容,則最好使用match

 var colorText = ",red,blue,green,yellow"; var colors3 = colorText.match(/[^\\,]+/g); console.log(colors3); 

MDN網絡文檔 [^xyz]

否定或補充的字符集。 也就是說,它匹配方括號中未包含的任何內容。

您的正則表達式/[^\\,]+/將匹配不包含任何逗號的任何字符序列。

因此,您的正則表達式將匹配colorText中的這些序列:

  • red
  • blue
  • green
  • yellow

並且split函數將按這些順序分割colorText

但是,如果要在每個逗號處分割字符串,請使用以下命令:

colors = colorText.split(',');

如果要防止拆分時出現空項目,可以使用String#match而不是String#split和正則表達式來匹配除逗號以外的所有字符。

 var regex = /[^,]+/g; console.log(",red,blue,green,yellow,".match(regex)); console.log("red,blue,green,yellow".match(regex)); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

因此,我的目標不是用逗號分隔字符串中的單詞。 我在一本書中找到了此代碼,並想理解它。 我犯的錯誤是我認為^匹配字符串的開頭,而實際上它表示在方括號內的“除”以外。 現在,我知道正則表達式可以匹配任意數量的不是逗號的字符,這就是告訴split()在每個列表元素中放置什么內容的原因。 第一個和最后一個元素是空字符串,因為這分別是第一個和最后一個單詞的左側和右側。

您必須從var colors3 = colorText.split(/[^\\,]+/);刪除該插入符號^ var colors3 = colorText.split(/[^\\,]+/); 使其運作良好:

 var colorText = "red,blue,green,yellow"; var colors3 = colorText.split(/[\\,]+/); console.log(colors3); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM