什么是在javascript中减少文件名的最优化或最简单的方法

时间:2010-03-03 23:29:30

标签: javascript optimization

我最近在javascript中创建了一个函数,该函数接受文件名和最大字符限制,其结果需要遵循以下规则:

  • 始终包含文件扩展名
  • 如果发生收缩,请保留文件名的第一部分和最后部分。
  • 始终使用'...
  • 替换已删除的字符
  • 如果文件长度低于最大值,则不执行任何操作
  • 你可以假设最大值是至少5个字符

现在我已经解决了这个问题,但它让我想到是否有更优雅或简单的方法在javascript中使用正则表达式或其他技术来完成此操作。它还让我有机会尝试jsFiddle。所以记住这是我的功能:

function ReduceFileName(name, max){        
if(name.length > max){        
    var end = name.substring(name.lastIndexOf('.'));
    var begin = name.substring(0, name.lastIndexOf('.'));
    max = max - end.length - 3;
    begin = begin.substr(0,max/2) + '...' + begin.substr(begin.length-(max/2) , max/2 + 1);
    return begin + end;        
}    
return name;
}

这是js Fiddle with tests

2 个答案:

答案 0 :(得分:0)

我不确定正则表达式是否会更优雅,但到目前为止,我想出了以下通过测试的结果:

function ReduceFileName(name, max){        
    if(name.length > max) {
        var ell ="\u2026"; // defines replacement characters
        var ext = (/\.[^\.]*$/.exec(name) || [""])[0]; // gets extension (with dot) or "" if no dot
        var m = (max-ell.length-ext.length)/2; // splits the remaining # of characters
        var a = Math.ceil(m);
        var z = Math.floor(m);
        var regex = new RegExp("^(.{"+a+"}).*(.{"+z+"})"+ext, "");
        var ret = regex.exec(name);
        return ret[1]+ell+ret[2]+ext;
    }
    return name;
}

答案 1 :(得分:0)

由于我没有对此进行太多的活动,我假设没有更好的方法来做到这一点,所以我会将我的方法视为答案,直到其他人想出其他的东西。< / p>

function ReduceFileName(name, max){        
if(name.length > max){        
    var end = name.substring(name.lastIndexOf('.'));
    var begin = name.substring(0, name.lastIndexOf('.'));
    max = max - end.length - 3;
    begin = begin.substr(0,max/2) + '...' + begin.substr(begin.length-(max/2) , max/2 + 1);
    return begin + end;        
}    
return name;
}