[英]Split using regex creates 2 empty elements in array
我需要使用正则表达式将字符串分成2部分,因此我使用了以下代码:
var str = "This is a test";
var list = str.split(/(test)/);
要求的输出:
list = ["This is a ", "test"]
而不是2,这给了我数组中的3个元素(最后一个为空)。 我知道正则表达式在第二场比赛之后一无所获,因此它添加了一个空的(第三场)元素。 有什么办法可以修改我的代码,以便我得到2个元素,从而避免最后一个空元素?
注意:以上代码是简化版本,除正则表达式外,我们还可以使用其他选项,但我必须使用正则表达式。
var str = "This is a test";
var list = str.split(/(test)/,2);
列表: ["This is a ", "test"]
如果您可以保证只期望长度为2的数组,但可能会Array.filter
,但是考虑到问题的性质,更可靠的解决方案是使用Array.filter
从数组中删除所有空字符串-包括中间的条目。数组,该数组由输入字符串中彼此相邻出现的多个定界符引起。
var list = str.split(/(test)/).filter(
function(v){ return v!=null && v!='' }
);
您可以尝试检查last元素是否为空:
var last = list.pop();
last.length || list.push(last);
要么:
list[list.length-1].length || list.pop();
甚至更短:
list.slice(-1)[0].length || list.pop();
要处理第一个空元素(如@Kobi建议的那样进行test was there
),请使用:
list[0].length || list.shift();
这给了我您想要的结果:
var str = "This is a test";
var list = str.split(/(?=test)/g);
(?=
是前瞻性的,它不捕获单词test
因此在拆分后保留在数组中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.