Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 根据特殊字符的长度(<;4)提取其之间的子字符串,并将缺少的字符替换为0,使其成为4_Javascript_Regex_String - Fatal编程技术网

Javascript 根据特殊字符的长度(<;4)提取其之间的子字符串,并将缺少的字符替换为0,使其成为4

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

我正在尝试开发一个IPv6子网计算器,我需要以扩展格式显示地址。也就是说,假设我们有这个IP地址:
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。谢谢你宝贵的帮助。:)