[英]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.