我已经看到了在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 :(得分:3)
您可以通过替换
来实现\b(?:0+:){2,}
与
:
function compIPV6(input) {
return input.replace(/\b(?: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/>'));
&#13;
答案 1 :(得分:1)
@ClasG的另一个答案有几个问题:
我建议使用正则表达式\b:?(?:0+:?){2,}
并将其替换为::
(两个冒号)
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(/\b:?(?:0+:?){2,}/, '::') + "<br>");
}
注意:Regex101测试会替换多个重复的零组。在XYZ编程语言中,您必须将替换次数限制为1.在JavaScript中,省略 g lobal标志。在PHP中,您将$limit
的{{1}}设置为1。
答案 2 :(得分:0)
//Use this in order to compress IPv6 AND remove leading 0s:
function compressIPV6(input) {
var formatted = input.replace(/\b(?:0+:){2,}/, ':');
var finalAddress = formatted.split(':')
.map(function(octet) {
return octet.replace(/\b0+/g, '');
}).join(':');
return finalAddress;
}
document.write(compressIPV6('2001:0db8:0000:0000:0000:0000:1428:57ab') );