我想从字符串的开头/结尾删除所有不必要的逗号。
例如; google, yahoo,, ,
应该成为google, yahoo
。
如果可能,,google,, , yahoo,, ,
应成为google,yahoo
。
我已尝试将以下代码作为起点,但似乎没有按预期工作。
trimCommas = function(s) {
s = s.replace(/,*$/, "");
s = s.replace(/^\,*/, "");
return s;
}
答案 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);