感觉很烂...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
<body>
<script type="text/javascript">
function out(str, obj, n){
if(n < 4){
if(str != "") str += ".";
for(var x in obj){
out(str + x.toString(), obj[x], n+1);
}
}else{
for(var x in obj){
if(obj[x].start == obj[x].end)
ip= str + "." + obj[x].start;
else
ip = str + "." + obj[x].start + "-" + obj[x].end;
document.write(ip + "<br/>");
}
}
} var strIP = "23.89.252.1|23.89.252.2|23.89.252.3|23.89.253.8|23.89.252.5|23.89.252.6|23.89.254.27|23.89.253.7|23.89.253.6|23.89.252.11";
var arrIP = strIP.split("|");
var ret = {};
arrIP.sort();
for(var i=0; i<arrIP.length; i++){
ip = arrIP[i].split(".");
obj = ret;
for(var j=0; j<ip.length-1; j++){
if(typeof obj[ip[j]] == 'undefined'){
obj[ip[j]] = {};
}
obj = obj[ip[j]];
}
val = parseInt(ip[ip.length-1], 10);
isFound = false;
for(var x in obj){
if(obj[x].start - 1 == val){
obj[x].start = val;
isFound = true;
break;
}else if(obj[x].end + 1 == val){
obj[x].end = val;
isFound = true;
break;
}
}
if(!isFound){
obj[val] = {};
obj[val].start = val;
obj[val].end = val;
}
}
document.write(strIP + "<br/><br/>");
out("", ret, 1);
</script>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
<body>
<script type="text/javascript">
function out(str, obj, n){
if(n < 4){
if(str != "") str += ".";
for(var x in obj){
out(str + x.toString(), obj[x], n+1);
}
}else{
for(var x in obj){
if(obj[x].start == obj[x].end)
ip= str + "." + obj[x].start;
else
ip = str + "." + obj[x].start + "-" + obj[x].end;
document.write(ip + "<br/>");
}
}
} var strIP = "23.89.252.1|23.89.252.2|23.89.252.3|23.89.253.8|23.89.252.5|23.89.252.6|23.89.254.27|23.89.253.7|23.89.253.6|23.89.252.11";
var arrIP = strIP.split("|");
var ret = {};
arrIP.sort();
for(var i=0; i<arrIP.length; i++){
ip = arrIP[i].split(".");
obj = ret;
for(var j=0; j<ip.length-1; j++){
if(typeof obj[ip[j]] == 'undefined'){
obj[ip[j]] = {};
}
obj = obj[ip[j]];
}
val = parseInt(ip[ip.length-1], 10);
isFound = false;
for(var x in obj){
if(obj[x].start - 1 == val){
obj[x].start = val;
isFound = true;
break;
}else if(obj[x].end + 1 == val){
obj[x].end = val;
isFound = true;
break;
}
}
if(!isFound){
obj[val] = {};
obj[val].start = val;
obj[val].end = val;
}
}
document.write(strIP + "<br/><br/>");
out("", ret, 1);
</script>
</body>
</html>
没仔细测试,你自己好好的测试一下吧。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
</head>
<script>
//从下面字符串中分出前三位相同的为一组,其中前三位相同且第四位是递增时取最小值+“-”+最大值表示。
strIP = "23.89.252.1|23.89.252.2|23.89.252.3|23.89.253.8|23.89.252.5|23.89.252.6|23.89.254.27|23.89.253.7|23.89.253.6|23.89.252.11"
var _out = [];
var _r = {};
var _a = strIP.replace(/(\d+\.\d+\.\d+\.)(\d+)/g, function(s, s1, s2){
if (!_r[s1]) {
_r[s1] = [];
}
_r[s1].push(1 * s2);
});
for (var o in _r) {
_r[o].sort(function(a, b){
return (a - b);
});
var _tmp = null;
for (var i = 0; i < _r[o].length; i++) {
if (i == 0 || _r[o][i] != _r[o][i - 1] + 1) {
if (_tmp) {
_out.push(o + _tmp.join("-"));
}
_tmp = new Array();
_tmp[0] = _r[o][i];
}
else {
_tmp[1] = _r[o][i];
}
}
if (_tmp) {
_out.push(o + _tmp.join("-"));
}
}
alert(_out.join("\n"));
</script>
<script language="JavaScript">
</script>
<body>
</body>
</html>