正在从数组(Regex)中删除空字符串-Javascript
Removing empty strings from array (Regex) - Javascript
我的项目中有以下代码:
for(i = 0; i < inputArr.length; i++) {
if(accountsBool) {
inputArr[i] = inputArr[i].split(/'s+/);
if (inputArr[i] == "" || !inputArr[i].match(/[^'s]/)) {
inputArr.splice(i,1);
}
}
}
我会尽力解释这个问题。。。
我需要这部分代码来删除所有空白和空字符串,但行。。。
inputArr[i] = inputArr[i].split(/'s+/);
而且。。。
if (inputArr[i] == "" || !inputArr[i].match(/[^'s]/)) {
inputArr.splice(i,1);
}
不要一起工作。我得到错误,"对象不支持此属性或方法"。如果我注释掉其中一个并与另一个一起运行代码,它似乎可以正常工作。语法似乎也很正确。有什么想法吗?
inputArr是从文本区域解析的字符串数组。
谢谢。
.split()
返回一个数组,该数组不适用于.match()
。
我需要这部分代码来删除所有空白和空字符串,但行
您似乎在说,应该从数组中删除不包含至少一个非空白字符的项,并且应该更新任何重新映射的项以删除任何空白(但保留其他字符)。如果是,请先使用.replace()
删除空白,然后测试是否删除该项。
请注意,如果在循环中使用.splice()
,则需要调整迭代器变量i
以允许缺少元素,或者更简单地说,向后循环
for(i = inputArr.length - 1; i >= 0; i--) {
if(accountsBool) {
inputArr[i] = inputArr[i].replace(/'s/g,"");
if (inputArr[i] === "") {
inputArr.splice(i,1);
}
}
}
如果你说不包含至少一个非空白字符的项目应该被删除,但你想在剩下的元素中保留空白,那么就这样做:
for(i = inputArr.length - 1; i >= 0; i--) {
if(accountsBool) {
if (!/[^'s]/.test(inputArr[i])) {
inputArr.splice(i,1);
}
}
}
还要注意的是,如果循环中没有其他处理,那么应该将if(accountsBool)
测试移到循环之前,而不是在每次迭代中都这样做。
String.split()将字符串拆分为一个数组,稍后将其视为字符串。您可以使用replace
功能而不是拆分:
inputArr[i] = inputArr[i].replace(/'s+/g, '');
然后:
if (inputArr[i] == "") {
inputArr.splice(i,1);
}
在所描述的循环中需要另一个循环,该循环将遍历split
方法生成的数组。正如评论者所说,match
不可能使用数组。所以类似于:
for (var i = 0; i < inputArr.length; i++) {
if(accountsBool) {
inputArr[i] = inputArr[i].split(/'s+/); // produces an array
for (var j = 0; j < inputArr[i].length; j++) {
if (inputArr[i][j] === "" || !inputArr[i][j].match(/['S]/)) { // check each string in the array for empty or space
// inputArr.splice(i,1);
}
}
}
}
同样,RegEx的[^'s]
部分可以被重写为['S]
,如上所述。
但还不完全清楚你想用splice
做什么(因此我在上面已经评论过了)。如果您试图完全去掉字符串中的所有空间,那么您的代码可能会简单得多——您只需要使用replace
方法。
如果您试图消除过多的空白,那么您的代码可能会简单得多:只需在每个字符串上使用replace
,/'s+/
作为RegEx搜索模式,' '
作为替换。空字符串可以在之后通过您已经拥有的简单条件检查来删除。。。
for (var i = 0; i < inputArr.length; i += 1) {
if (accountsBool) {
inputArr[i] = inputArr[i].replace(/'s+/, ' '); // replaces all multiple spaces with one space
if (!inputArr[i]) { // check each string in the array for empty or space
inputArr.splice(i,1);
}
}
}
这将给你留下字符串,例如,单词之间有空格,但不能超过一个空格(例如,它应该去掉双倍间距和制表符间距)。
如果更换
inputArr[i] = inputArr[i].split(/'s+/);
带有
inputArr[i] = inputArr[i].replace(/'s/g,'');
这应该可以解决一个问题。
此外,!inputArr[i].match(/[^'s]/)
是多余的,因为您已经从该输入数组值中删除了所有空白。
最后,当拼接数组或按相反顺序迭代时,需要递减索引。
这是一把要测试的小提琴。
如果要删除空字符串或仅为空白的条目,请在数组上使用.filter()
。
inputArr = inputArr.filter(function(item) {
return accountsBool && Boolean(item.trim())
});
注意以下内容:
- 这将用新数组替换旧数组
- 对于旧浏览器,您需要
.filter()
的填充程序 - 对于旧浏览器,您需要
.trim()
的填充程序- 可以使用
item.replace(/^'s+|'s+$/g, "")
而不是item.trim()
- 可以使用
- 如何使用javascript在html表中删除字符串
- 如何在字符串中的值之前删除字符串中的动态数据?/ 使用 Lodash 的 _.trimStart 与动态数据
- 使用Javascript删除字符串的内容
- 如何删除字符串开头和结尾的换行符
- 用于删除字符串中字符开头到结尾的正则表达式
- 对于包含特定字符串的每个元素,删除字符串及其后的所有内容
- 使用Javascript/jQuery删除字符串中的反斜杠
- 如何删除字符串中间的尾随小数点零
- 删除字符串末尾的特定字符(html元素)
- 如何删除字符串周围的特定字符
- 使用javascript删除字符串中的重复项
- JavaScript在单击时从列表中删除字符串(如果已经存在)
- 如何删除字符串中从特定文本开始的所有字符
- 删除字符串中第5个字符之后的所有字符
- 如何删除字符串的第一个和最后一个字符
- 如何使用 JavaScript 删除字符串中除数字和空格之外的所有特殊字符
- 如何使用 javascript 删除字符串之间的标记
- textarea val() 使用 jQuery 编辑和删除字符串
- 从 href 中删除字符串
- 手动删除字符串 - JavaScript 中的空格