[英]How to compress IPV6 address using javascript?
我在java看到了壓縮IPV6的代碼。 鏈接指定相同。 下面是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
@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中,省略了摹葉形標志。 在 PHP 中,您將preg_replace
的$limit
設置為 1。
你可以通過替換來做到
\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/>'));
您可以使用此方法來壓縮 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') );
您可以使用 function 來考慮所有需要的情況:
const compressIPV6 = (ip) => { //First remove the leading 0s of the octets. If it's '0000', replace with '0' let output = ip.split(':').map(terms => terms.replace(/\b0+/g, '') || '0').join(":"); //Then search for all occurrences of continuous '0' octets let zeros = [...output.matchAll(/\b:?(?:0+:?){2,}/g)]; //If there are occurences, see which is the longest one and replace it with '::' if (zeros.length > 0) { let max = ''; zeros.forEach(item => { if (item[0].replaceAll(':', '').length > max.replaceAll(':', '').length) { max = item[0]; } }) output = output.replace(max, '::'); } return output; } document.write(compressIPV6('38c1:3db8:0000:0000:0000:0000:0043:000a') + '<br/>'); document.write(compressIPV6('0000:0000:0000:0000:38c1:3db8:0043:000a') + '<br/>'); document.write(compressIPV6('38c1:3db8:0000:0043:000a:0000:0000:0000') + '<br/>'); document.write(compressIPV6('38c1:0000:0000:3db8:0000:0000:0000:12ab') + '<br/>');
如果多次出現相同長度的連續“0”八位字節,它只會替換第一個。 無論重復零是在開頭、中間還是結尾,這都將起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.