感觉很烂...
<!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>

解决方案 »

  1.   

    抱歉昨天喝了太多的酒,
    没仔细测试,你自己好好的测试一下吧。
    <!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>