删除JavaScript中不需要的逗号

时间:2009-11-03 07:47:27

标签: javascript regex

我想从字符串的开头/结尾删除所有不必要的逗号。

例如; google, yahoo,, ,应该成为google, yahoo

如果可能,,google,, , yahoo,, ,应成为google,yahoo

我已尝试将以下代码作为起点,但似乎没有按预期工作。

trimCommas = function(s) {
 s = s.replace(/,*$/, "");
 s = s.replace(/^\,*/, "");
 return s;
}

9 个答案:

答案 0 :(得分:17)

在你的例子中,如果逗号在开头或结尾处有空格,你也想修剪逗号,使用类似的东西:

str.replace(/^[,\s]+|[,\s]+$/g, '').replace(/,[,\s]*,/g, ',');

请注意使用'g'修饰符进行全局替换。

答案 1 :(得分:6)

你需要这个:

s = s.replace(/[,\s]{2,}/,""); //Removes double or more commas / spaces
s = s.replace(/^,*/,""); //Removes all commas from the beginning
s = s.replace(/,*$/,""); //Removes all commas from the end

编辑:做出所有改变 - 现在应该工作。

答案 2 :(得分:4)

我的看法:

var cleanStr = str.replace(/^[\s,]+/,"")
                  .replace(/[\s,]+$/,"")
                  .replace(/\s*,+\s*(,+\s*)*/g,",")

这个适用于opera, internet explorer, whatever

实际测试了最后一个,它有效!

答案 3 :(得分:3)

您需要做的是用一个逗号替换所有“空格和逗号”组,然后从开头和结尾删除逗号:

trimCommas = function(str) {
    str = str.replace(/[,\s]*,[,\s]*/g, ",");
    str = str.replace(/^,/, "");
    str = str.replace(/,$/, "");
    return str;
}

第一个用一个逗号替换每个空格和逗号序列,只要其中至少有一个逗号。这将处理“Internet Explorer”注释中留下的边缘大小写。

第二个和第三个在必要时删除字符串开头和结尾的逗号。

您还可以添加(到最后):

str = str.replace(/[\s]+/, " ");

将多个空格折叠到一个空格并

str = str.replace(/,/g, ", ");

如果你希望它们被很好地格式化(每个逗号后面的空格)。

更通用的解决方案是传递参数以指示行为:

  • true传递collapse会占用一个部分中的空格(一个部分被定义为逗号之间的字符)。
  • true传递addSpace将使用", "来分隔各个部分,而不仅仅是","

该代码如下。对于您的特定情况可能没有必要,但在代码重用方面可能对其他人更好。

trimCommas = function(str,collapse,addspace) {
    str = str.replace(/[,\s]*,[,\s]*/g, ",").replace(/^,/, "").replace(/,$/, "");
    if (collapse) {
        str = str.replace(/[\s]+/, " ");
    }
    if (addspace) {
        str = str.replace(/,/g, ", ");
    }
    return str;
}

答案 4 :(得分:1)

首先在Google上ping“Javascript Trim”:http://www.somacon.com/p355.php。你似乎用逗号实现了这个,我不明白为什么它会成为一个问题(虽然你在第二个中逃脱而不是在第一个中)。

答案 5 :(得分:1)

不太复杂,但很简单:

',google,, , yahoo,, ,'.replace(/\s/g, '').replace(/,+/g, ',');

答案 6 :(得分:1)

您应该只能使用一个替换呼叫:

/^( *, *)+|(, *(?=,|$))+/g

测试:

'google, yahoo,, ,'.replace(/^( *, *)+|(, *(?=,|$))+/g, '');
"google, yahoo"
',google,, , yahoo,, ,'.replace(/^( *, *)+|(, *(?=,|$))+/g, '');
"google, yahoo"

故障:

/
  ^( *, *)+     # Match start of string followed by zero or more spaces
                # followed by , followed by zero or more spaces.
                # Repeat one or more times
  |             # regex or
  (, *(?=,|$))+ # Match , followed by zero or more spaces which have a comma
                # after it or EOL. Repeat one or more times
/g              # `g` modifier will run on until there is no more matches

(?=...)是向前看将不会移动匹配的位置,但只验证匹配后的字符。在我们的案例中,我们寻找,或EOL

答案 7 :(得分:0)

match()比replace()

更好的工具
 str  = "    aa,   bb,,   cc  , dd,,,";
 newStr = str.match(/[^\s,]+/g).join(",")
 alert("[" + newStr + "]")

答案 8 :(得分:0)

当您要替换",," ",,,", ",,,,"",,,,,"时,代码将被","删除。

var abc = new String("46590,26.91667,75.81667,,,45346,27.18333,78.01667,,,45630,12.97194,77.59369,,,47413,19.07283,72.88261,,,45981,13.08784,80.27847,,");
var pqr= abc.replace(/,,/g,',').replace(/,,/g, ',');

alert(pqr);