1

如何从 JavaScript/jQuery 中的逗号分隔字符串中删除空值?

有没有一种简单的方法,还是我需要遍历它并手动删除它们?

有没有办法在 JavaScript/jQuery 中合并所有拆分(str 和 str1)?

代码:

var str = '+ a + "|" + b';
var str1 = '+ a + "-" + b';

str = str.split("+").join(",").split('"|"').join(",");
str1 = str1.split("+").join(",").split('"-"').join(",");
console.log(str); //, a , , , b
console.log(str1); //, a , , , b

预期输出:

a,b

帮助将不胜感激:)

4

3 回答 3

2

正如我所看到的,您想从字符串的开头和结尾删除+、和空格"|""-"并想用一个逗号替换字符串中的那些。这是执行此操作的三个正则表达式:

str = str.replace(/^(?:[\s+]|"[|-]")+/, '')
         .replace(/(?:[\s+]|"[|-]")+$/, '')
         .replace(/(?:[\s+]|"[|-]")+/g, ',');

(?:[\s+]|"[|-]")匹配空格或加号,或"|""-"。最后+的 重复一次或多次。在第一个表达式中,我们将匹配锚定到字符串的开头并将其替换为空(即删除它)。在第二个表达式中,我们将匹配锚定到字符串的末尾并将其删除。而在第三个中,没有锚点,因为剩下的所有匹配项都必须在字符串中的某个位置——我们将它们替换为,. 注意g最后一个表达式的修饰符 - 没有它只会替换第一个匹配项。

于 2013-09-22T06:40:33.527 回答
1

另一个答案很有用,可能正是您正在寻找的。

如果出于某种原因,您仍想使用split,幸运的是,该方法也使用正则表达式作为分隔符:

str = str.split(/\s*\+\s*(?:"\|"\s*\+\s*)?/).slice(1).join(",");

str1 = str1.split(/\s*\+\s*(?:"-"\s*\+\s*)?/).slice(1).join(",");

因为“a”前面有一个加号,所以可以对数组进行切片以仅返回其后面的元素。

另外,由于您提到您是正则表达式的新手,因此解释如下:

  • 任何数量的空间
  • 加号
  • 任何数量的空间
  • 可选的(因为?在组之后,即括号):一个非捕获(这就是?:意思)组包含:
    • "|"
    • 任何数量的空间
    • 另一个加号
    • 任何数量的空间
于 2013-09-22T06:59:08.413 回答
1

工作得很好: str.split(/[ ,]+/).filter(function(v){return v!==''}).join(',')

于 2013-12-04T09:55:44.637 回答