正在从数组(Regex)中删除空字符串-Javascript

Removing empty strings from array (Regex) - Javascript

本文关键字:删除 字符串 -Javascript Regex 数组      更新时间:2023-09-26

我的项目中有以下代码:

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()