我需要将一个大字符串按照某种方式使用split()
函数拆分成数组,但现在每个元素前面都有一个空格。
例如:
var array = [" hello"," goodbye"," no"];
我该如何摆脱这个问题?
根据要求拆分代码:
var depots = v.innerHTML.split(',');
我需要将一个大字符串按照某种方式使用split()
函数拆分成数组,但现在每个元素前面都有一个空格。
例如:
var array = [" hello"," goodbye"," no"];
我该如何摆脱这个问题?
根据要求拆分代码:
var depots = v.innerHTML.split(',');
Array#map()
来更改数组中的每个元素,而是在使用分隔符拆分字符串时从字符串本身中删除空格。String#trim()
与 String#split()
和正则表达式。str.trim().split(/\s*,\s*/)
正则表达式 \s*,\s*
可以匹配被任意数量(包括零)空格包围的逗号。
演示实例:
var regex = /\s*,\s*/;
document.getElementById('textbox').addEventListener('keyup', function() {
document.getElementById('result').innerHTML = JSON.stringify(this.value.trim().split(regex));
});
<input type="text" id="textbox" />
<pre id="result"></pre>
trim()
函数会移除字符串开头和结尾的空格,而使用正则表达式,\s*
进行split
操作会将字符串按照逗号后面的任意数量空格进行分割。
同样的效果也可以通过在String#match
中使用带有全局标记的否定正则表达式来实现。
str.match(/[^,\s]+/g)
为什么不应该使用
map()
?
在这种情况下使用 map
需要额外的开销。首先,通过 ,
分割字符串,然后迭代数组的每个元素并使用 trim
删除前导和尾随空格,然后更新数组。这比使用上面的正则表达式的 split
慢一些。
var array = [" hello"," goodbye"," no"].toString().replace(/\s*\,\s*/g, ",").trim().split(",");
console.log(array)
在@Tushar的回答中还有一件事要补充。 回答很好,解释得很清楚。只是漏掉了一件事,我认为这不是问题的要求。
如果用户输入双逗号而不是单逗号,则会将空字符串添加/返回到数组中。我对代码进行了一点修改。
.filter(elem => elem.length !== 0)
filter()
迭代数组中的每个元素,并通过字符串的 .length
属性检查它是否为空。如果元素长度不等于零,它将被添加/作为元素返回到数组中。最后将返回一个全新的过滤后的数组。
var regex = /\s*,\s*/;
document.getElementById('textbox').addEventListener('keyup', function() {
document.getElementById('result').innerHTML = JSON.stringify(this.value.trim().split(regex).filter(elem => elem.length !== 0));
});
<input type="text" id="textbox" />
<pre id="result"></pre>
for (int i = 0; i < array.length; i++)
trimmedArray[i] = array[i].trim();
您需要这两个 jQuery 函数:
1.) 迭代数组元素时能够编辑项目: http://api.jquery.com/jquery.map/
2.) 从字符串开头和结尾删除空格: http://api.jquery.com/jQuery.trim/
使用方式如下:
array = $.map(array, function(value) { return value.trim();});
请查看这个JSFiddle: https://jsfiddle.net/L00eyL4x/49/
"test,test,test, ff ff, ffdf d , df".trim().split(/,\s*/)
- Oleksandr T.v.innerHTML.split(',');
然后“我怎样才能去掉空格?”上面给出了输出["test", "test", "test", "ff ff", "ffdf d ", "df"]
,这就是OP想要的。 - Tushar"ffdf d "
- 如您所见,在d
后面有一个空格。无论如何,我已经在评论中告诉作者看看您的解决方案。我认为它很好,但需要知道作者想要什么。 - Oleksandr T.