替换双逗号,直到有一些

时间:2014-04-02 04:44:36

标签: javascript jquery regex

我正在尝试用,null,

替换所有双逗号

问题是我需要在更换它时继续这样做。我正在考虑添加一个循环但是还有其他更有效的替代方案吗?

var test = "[1,2,,,3,4,,,,,,5,6]".replace(/,{2}/g, ",null,");

alert(test);

结果应为:

"[1,2,null,null,3,4,null,null,null,null,null,5,6]"

但相反:

[1,2,null,,3,4,null,,null,,null,5,6]

所以我必须创建一个循环并执行它直到所有双逗号完成。不确定是否还有其他办法?

作为旁边信息,我可以事后做到:

var myArray = $.parseJSON(test);

目前它失败了,我猜它是因为它是无效的json。

6 个答案:

答案 0 :(得分:4)

单一正则表达式:

"[AB,,,CD,,,,,,EF]".replace(/,(?=,)/g, ',null');

demo

在这里,我们使用?=前瞻查找2个逗号(“逗号后面带逗号的逗号”),但只匹配并替换第一个。

编辑:

您似乎对速度感兴趣,这里有一些tests

答案 1 :(得分:3)

str.split(',').map(function(x) { return x ? x : 'null' }).join(',');

FIDDLE

用逗号分割字符串,然后map()迭代并返回回调中的每个值,如果是thruthy则返回x(值),如果是falsy则返回字符串'null',这是一个空字符串,然后再将它连接在一起。

答案 2 :(得分:0)

不确定正则表达式是否可以在没有循环的情况下处理它。

替代解决方案是将split拆分为一个数组:'1,2,,,3,4,,,,,,5,6'.split(',');然后循环遍历它并将所有空字符串替换为null,然后将其连接回来。

所以,像这样:

var s = '1,2,,,3,4,,,,,,5,6';
var a = s.split(',');
for (var i = 0; i < a.length; i++) {
    if (a[i] == "") {
        a[i] = "null";
    }
}
s = '[' + a.join(',') + ']';

请在此处查看:http://jsfiddle.net/fVMLv/1/

答案 3 :(得分:0)

你可以这样做:

var test = "[1,2,,,3,4,,,,,,5,6]".split(',').join(',|').replace(/\|,/g,"null,");
alert(test.replace(/\|/g,""));

警告:

  

并[1,2,NULL,NULL,3,4-,NULL,NULL,NULL,NULL,NULL,5,6]

演示:http://jsfiddle.net/AmitJoki/Zuv38/

答案 4 :(得分:0)

试试这个

var str = "1,2,,,3,4,,,,,,5,6";
str = str.split(',');
var strResult ='';
$(str).each(function(){
    if(this==''){
        strResult +='null,';
    }
    else{
        strResult +=this+',';
    }
});
strResult = strResult.substring(0,strResult.length-1);
alert(strResult);

DEMO

答案 5 :(得分:0)

问题在于连续发生双逗号。 ,,,, - &gt;将由RegExp作为2套双重逗号。那么,结果将是: - ,null ,, null, - &gt;注意,跳过了中间另一个双逗号的出现,因为RegEx是贪婪的(已经使用了第二个逗号,它不再与第三个逗号一起使用。而是第三个和第四个一起使用)。

var test = "[AB,,,CD,,,,,,EF]".replace(/,,/g, ",null,").replace(/,,/g, ",null,");
alert(test);

因此,使用此RegExp,调用它两次将解决此问题。