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