我有以下代码段:
var colorText = "red,blue,green,yellow";
var colors3 = colorText.split(/[^\,]+/);
alert(colors3); // ["", ",", ",", ",", ""]
我不明白这里发生了什么。据我所知,正则表达式将匹配字符串开头的任何逗号,并且它匹配这些字符串中的一个或多个。当我们将此正则表达式作为split
的参数提供时会发生什么?当然,如果我们只是尝试将正则表达式与colorText
匹配,那么我们就不会得到匹配,因为起始字符不是逗号。但正则表达式如何提供给split
导致一组逗号和两边的空字符串?
答案 0 :(得分:3)
为什么只需执行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);
答案 1 :(得分:2)
正如MDN web docs [^xyz]
否定或补充的字符集。也就是说,它匹配括号中未包含的任何内容。
您的正则表达式/[^\,]+/
将匹配任何不包含任何逗号的字符序列。
因此,您的正则表达式将匹配colorText
中的这些序列:
red
blue
green
yellow
并且split
函数会将colorText
拆分为这些序列。
但是,如果要在每个逗号处拆分字符串,请使用:
colors = colorText.split(',');
答案 2 :(得分:1)
如果您希望在拆分时阻止空项目,可以使用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; }

答案 3 :(得分:1)
所以,我的目标不是用逗号分隔字符串中的单词。我在一本书中找到了这个代码并希望了解它。我犯的错误是我认为^
匹配字符串的开头,而实际上它意味着“方括号内的任何东西”。现在我明白正则表达式匹配任何不是逗号的字符,这就是告诉split()
每个列表元素放什么的内容。第一个和最后一个元素是空字符串,因为这分别是第一个和最后一个字的左侧和右侧。
答案 4 :(得分:0)
您必须从^
中移除该插入符var colors3 = colorText.split(/[^\,]+/);
才能使其正常运行:
var colorText = "red,blue,green,yellow";
var colors3 = colorText.split(/[\,]+/);
console.log(colors3);