通过正则表达式拆分字符串

时间:2017-09-22 13:23:09

标签: javascript regex

我有以下代码段:

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

我不明白这里发生了什么。据我所知,正则表达式将匹配字符串开头的任何逗号,并且它匹配这些字符串中的一个或多个。当我们将此正则表达式作为split的参数提供时会发生什么?当然,如果我们只是尝试将正则表达式与colorText匹配,那么我们就不会得到匹配,因为起始字符不是逗号。但正则表达式如何提供给split导致一组逗号和两边的空字符串?

5 个答案:

答案 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);