我有这个代码:
var r = /(?:^\s*([^\s]*)\s*)(?:,\s*([^\s]*)\s*){0,}$/ var s = " a,b,c " var m = s.match(r) m => [" a,c ","a","c"]
看起来整个字符串已经匹配,但是哪里有“b”了?我宁愿得到:
[" a,"b","c"]
所以我可以用s.split(‘,’)的结果做m.shift(),也可以删除空格.
我在正则表达式中有错误,还是误解String.prototype.match?
解决方法
这是一个很简单&直接的方式来做到这一点,而不需要复杂的正则表达式.
var str = " a,c " var arr = str.split(",").map(function(item) { return item.trim(); }); //arr = ["a","c"]
IE9及以上版本支持nativemap.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
或者在ES6 / TypeScript中,它变得更短:
var arr = str.split(",").map((item) => item.trim());