Javascript 替换双逗号,直到出现一些

Javascript 替换双逗号,直到出现一些,javascript,jquery,regex,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] 所以我必须创建一个循环

我正在尝试用
、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。

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

另一种解决方案是将is拆分为一个数组:
'1,2,3,4,5,6'
然后循环遍历它,并用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(',') + ']';
var s='1,2,3,4,5,6';
var a=s.split(',');
对于(变量i=0;i
请参见此处:

单个正则表达式:

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

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

编辑:

您似乎对速度感兴趣,以下是一些。

您可以这样做:

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]

演示:

试试这个

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


用逗号分割字符串,然后
map()
迭代并返回回调中的每个值,三元函数返回
x
(值)if thruthy和字符串
'null'
if falsy(空字符串),然后再次将其连接在一起。

问题在于双逗号连续出现。 ,,,,->将由该RegExp作为两组双逗号。因此,结果将是:- ,null,,null,->请注意,由于正则表达式是贪婪的(已使用第二个逗号,不再与第三个逗号一起使用,而是将第三个和第四个逗号一起使用),因此跳过了中间出现的另一个双逗号


因此,使用这个RegExp,调用两次就可以解决这个问题。

这非常短!地图做什么?你能给我一些链接吗?干得好,@adeneo+1使用映射类似于使用循环。当大量使用时,它不会降低性能吗?下面很少有解决方案,使用拆分和联接会比只使用正则表达式慢,如果我没有错的话。逗号可能会比这个多得多,因为它是用户数据,所以性能是我主要关心的问题。不管有多少个逗号,可能的重复实际上都可以完美地工作。乍一看,我认为我需要更多可用的替换逗号。这也避免了创建仅使用2个替换的while循环。非常好。我需要测试性能,因为这对我来说是这个问题的一个关键方面,因为我认为正则表达式将比迭代或拆分更快
str.split(',').map(function(x) { return x ? x : 'null' }).join(',');
var test = "[AB,,,CD,,,,,,EF]".replace(/,,/g, ",null,").replace(/,,/g, ",null,");
alert(test);