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