我正在尝试用,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。
答案 0 :(得分:4)
单一正则表达式:
"[AB,,,CD,,,,,,EF]".replace(/,(?=,)/g, ',null');
在这里,我们使用?=
前瞻查找2个逗号(“逗号后面带逗号的逗号”),但只匹配并替换第一个。
编辑:
您似乎对速度感兴趣,这里有一些tests。
答案 1 :(得分:3)
str.split(',').map(function(x) { return x ? x : 'null' }).join(',');
用逗号分割字符串,然后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]
答案 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);
答案 5 :(得分:0)
问题在于连续发生双逗号。 ,,,, - &gt;将由RegExp作为2套双重逗号。那么,结果将是: - ,null ,, null, - &gt;注意,跳过了中间另一个双逗号的出现,因为RegEx是贪婪的(已经使用了第二个逗号,它不再与第三个逗号一起使用。而是第三个和第四个一起使用)。
var test = "[AB,,,CD,,,,,,EF]".replace(/,,/g, ",null,").replace(/,,/g, ",null,");
alert(test);
因此,使用此RegExp,调用它两次将解决此问题。