我已经看到了用java压缩IPV6的代码。链接指定了相同的内容。下面是Java中的代码。String resultString = subjectString.replaceAll("((?::0\\b){2,}):?(?!\\S*\\b\\1:0\\b)(\\S*)", "::$2");,但在Javascript中,我感到困惑,因为如何才能使regex表达式匹配相同的表达式。你能在这里分享一些建议吗?
示例: fe80:00:00:00:8e3:a11a:2a49:1148结果:fe80:8e3:a11a:2a49:1148
发布于 2017-06-08 09:56:10
你可以通过替换
\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/>'));
发布于 2017-12-30 06:59:27
@ClasG的另一个答案有几个问题:
我建议使用regex \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中,您省略了global标志。在PHP中,您将$limit的preg_replace设置为1。
发布于 2019-07-25 14:42:51
您可以使用此方法来压缩IPv6并删除前面的0:
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') );
https://stackoverflow.com/questions/44432191
复制相似问题