首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用javascript压缩IPV6地址?

如何使用javascript压缩IPV6地址?
EN

Stack Overflow用户
提问于 2017-06-08 09:43:47
回答 4查看 1.6K关注 0票数 0

我已经看到了用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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-06-08 09:56:10

你可以通过替换

代码语言:javascript
复制
\b(?:0+:){2,}

使用

代码语言:javascript
复制
:

代码语言:javascript
复制
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/>'));

去regex101看看吧

票数 3
EN

Stack Overflow用户

发布于 2017-12-30 06:59:27

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

  1. 如果重复零位于IPv6地址的开头或全部为零,则只替换一个冒号。
  2. 如果重复零位于末尾,则不会替换。

我建议使用regex \b:?(?:0+:?){2,}并将其替换为:: (两个冒号)。

Regex101试验

JavaScript示例:

代码语言: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中,您将$limitpreg_replace设置为1。

票数 5
EN

Stack Overflow用户

发布于 2019-07-25 14:42:51

您可以使用此方法来压缩IPv6并删除前面的0:

代码语言:javascript
复制
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') );

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44432191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档