如何使用javascript压缩IPV6地址?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用javascript压缩IPV6地址?相关的知识,希望对你有一定的参考价值。

我已经看到了在java中压缩IPV6的代码。 link指定相同。下面是Java中的代码。 String resultString = subjectString.replaceAll("((?::0\b){2,}):?(?!\S*\b\1:0\b)(\S*)", "::$2"); 但是在javascript中我很困惑,我怎么能得到正则表达式匹配相同。你能在这里分享一些指示吗?

示例:fe80:00:00:00:8e3:a11a:2a49:1148结果:fe80 :: 8e3:a11a:2a49:1148

答案

你可以通过替换来做到这一点

(?:0+:){2,}

:

function compIPV6(input) {
  return input.replace(/(?:0+:){2,}/, ':');
}

document.write(compIPV6('2001:db8:0:0:0:0:2:1') + '<br/>');
document.write(compIPV6('fe80:00:00:00:8e3:a11a:2a49:1148' + '<br/>'));
另一答案

@ClasG的另一个答案有几个问题:

  1. 如果重复的零位于IPv6地址的开头或全为零,则仅替换1个冒号。
  2. 如果重复的零在最后,它们就不会被替换。

我建议使用正则表达式:?(?:0+:?){2,}并将其替换为::(两个冒号)

Regex101 tests

JavaScript示例:

var ips = [
'2001:0db8:ac10:0000:0000:0000:0000:ffff',
'2001:0db8:ac10:0000:0000:0000:0000:0000',
'0:0:0:0:0:2001:0db8:ac10',
'2001:0db8:ac10:aaaa:0000:bbbb:cccc:ffff',
'2001:0db8:ac10:0000:0000:bbbb:00:00'	
];

for (var i = 0; i < ips.length; i++) {
document.write(ips[i].replace(/:?(?:0+:?){2,}/, '::') + "<br>"); 
}

以上是关于如何使用javascript压缩IPV6地址?的主要内容,如果未能解决你的问题,请参考以下文章

IPv6

使用 PHP 扩展 IPv6 地址的快速方法

IPV6地址格式分析

IPv6基础知识

CCNA-8.IPv6

C语言编程对IPV6地址进行压缩算法用函数实现