Javascript 根据特殊字符的长度(<;4)提取其之间的子字符串,并将缺少的字符替换为0,使其成为4
我正在尝试开发一个IPv6子网计算器,我需要以扩展格式显示地址。也就是说,假设我们有这个IP地址:Javascript 根据特殊字符的长度(<;4)提取其之间的子字符串,并将缺少的字符替换为0,使其成为4,javascript,regex,string,Javascript,Regex,String,我正在尝试开发一个IPv6子网计算器,我需要以扩展格式显示地址。也就是说,假设我们有这个IP地址:2001:DB8:C003:1::F00D/48,我需要根据已经存在的字段数量(最多8个字段)将::替换为零,例如:0000:0000:0000:。 我使用switch语句实现了这一点,但IPv6地址在其压缩表示法中也省略了前导零。从上面的IP地址中,压缩了:DB8。它实际上是:0DB8,我也需要适应它 这就是我迄今为止所尝试的: 代码 /*To calculate hex field*/ v
2001:DB8:C003:1::F00D/48
,我需要根据已经存在的字段数量(最多8个字段)将::
替换为零,例如:0000:0000:0000:
。
我使用switch语句实现了这一点,但IPv6地址在其压缩表示法中也省略了前导零。从上面的IP地址中,压缩了
:DB8
。它实际上是:0DB8
,我也需要适应它
这就是我迄今为止所尝试的:
代码
/*To calculate hex field*/
var field = (ip.split(":").length - 1);
var condens = ":0000:0000:0000:0000:0000:0000:0000";
switch(field)
{
case 1:
{
var block=ip.substring(ip.lastIndexOf(":")+1,ip.lastIndexOf(":")); //to extract strings between the special character
var inputString = ip,
expand = inputString.replace(/(::)+/g, condens);
console.log(expand);
while(block.length < 4)
{
//replace fields only with missing characters with 0
}
$("#expand").attr("value",expand);
break;
}
case 2:
{
var inputString = ip,
expand = inputString.replace(/(::)+/g, ":0000:0000:0000:0000:0000:0000:0000");
console.log(expand);
$("#expand").attr("value",expand);
break;
}
case 3:
{
var inputString = ip,
expand = inputString.replace(/(::)+/g, ":0000:0000:0000:0000:0000:");
console.log(expand);
$("#expand").attr("value",expand);
break;
}
case 4:
{
var inputString = ip,
expand = inputString.replace(/(::)+/g, ":0000:0000:0000:0000:");
console.log(expand);
$("#expand").attr("value",expand);
break;
}
case 5:
{
var inputString = ip,
expand = inputString.replace(/(::)+/g, ":0000:0000:0000:");
console.log(expand);
$("#expand").attr("value",expand);
break;
}
case 6:
{
var inputString = ip,
expand = inputString.replace(/(::)+/g, ":0000:0000:");
console.log(expand);
$("#expand").attr("value",expand);
break;
}
}
/*计算十六进制字段*/
var字段=(ip.split(“:”).length-1);
变量condens=“:0000:0000:0000:0000:0000:0000:0000”;
开关(现场)
{
案例1:
{
var block=ip.substring(ip.lastIndexOf(“:”)+1,ip.lastIndexOf(“:”);//提取特殊字符之间的字符串
var inputString=ip,
expand=inputString.replace(/(:)+/g,condens);
console.log(展开);
while(block.length<4)
{
//仅用0替换缺少的字符替换字段
}
$(“扩展”).attr(“值”,扩展);
打破
}
案例2:
{
var inputString=ip,
expand=inputString.replace(/(:)+/g,“:0000:0000:0000:0000:0000:0000”);
console.log(展开);
$(“扩展”).attr(“值”,扩展);
打破
}
案例3:
{
var inputString=ip,
expand=inputString.replace(/(:)+/g,“:0000:0000:0000:0000:”);
console.log(展开);
$(“扩展”).attr(“值”,扩展);
打破
}
案例4:
{
var inputString=ip,
expand=inputString.replace(/(:)+/g,“:0000:0000:0000:0000:”);
console.log(展开);
$(“扩展”).attr(“值”,扩展);
打破
}
案例5:
{
var inputString=ip,
expand=inputString.replace(/(:)+/g,“:0000:0000:0000:”);
console.log(展开);
$(“扩展”).attr(“值”,扩展);
打破
}
案例6:
{
var inputString=ip,
expand=inputString.replace(/(:)+/g,“:0000:0000:”);
console.log(展开);
$(“扩展”).attr(“值”,扩展);
打破
}
}
如您所见,目前我正在提取
:
之间的子字符串。我只需要提取长度小于4的子字符串,并添加前导零,使长度达到4。然后,用新的子字符串替换我提取的子字符串(带前导零)并打印它
有人能帮我吗?谢谢。可以用一种更简单的方式:
var输入='2001:DB8:C003:1::F00D/48';
var tmp=input.split(/\/);
var ip=tmp[0];
var subnet=tmp[1];
//如果ip被压缩
if(ip.match(“:”)){
//+1返回,因为数组中有一个额外的空元素(因为:)
var-missingPartsNumber=8-ip.split(“:”).length+1;
//将::替换为ip中需要8个部件的数量
ip=ip.替换(/::/,焊盘('',缺少零件编号+1':');
}
var paddedIp=ip.split(“:”).map(函数(部分){
回位垫(第4部分,“0”)
}).join(“:”)+“/”+子网;//如果需要,请重新添加子网
//从http://stackoverflow.com/a/10073788/5388620
功能板(n,宽度,z){
z=z | |“0”;
n=n+'';
返回n.length>=width?n:新数组(width-n.length+1);
}
log('in:'+input);
snippet.log('out:'+paddedIp);
非常简单。谢谢。:)我的问题是,如何根据已经存在的字段修改它以添加:0000:?我只能想用switch语句来做。啊,我的糟糕,我的ipv6设备生锈了。我会更新我的anwser。谢谢你宝贵的帮助。:)