读书人

!求正则表达式!高分求一去重复数字串

发布时间: 2012-04-01 17:23:46 作者: rapoo

!!求正则表达式!高分求一去重复数字串的正则表达式,在线等;请高手帮忙;
高分求一去重复数字串正则表达式,在线等;请高手帮忙;

问题:一小数或者整数,比如-0.233641464278
去(小数点 、负号、有效数字前的0);
返回指定长度(0-5)的不重复的字符串,原串顺序不变,比如长度为4,那么返回的串应该是'2364'。

要求:必须要正则表达式来实现,不允许使用循环;返回最长长度为5.

若函数为
function dN(num,len){
return (处理后的num字符串,长度为len)
}

则 dN(-0.303545,3)='305';
dN(33766545,4)='3765';

再强调,要求高效率执行,不要循环,尽量用正则表达式。




[解决办法]

JScript code
<script type="text/javascript"><!--    var nstr = "";    function dN(num,len){         num.toString().replace(/-|0(?=\.)|\./g,function(){return arguments[3];}).replace(/\d/g, function(){            (nstr.indexOf(arguments[0]) == -1) && (nstr += arguments[0])        })        return nstr.substring(0,len)    }    alert(dN(-0.233641464278, 5))//--></script>
[解决办法]
再优化了一下, 不知道用哈希效率怎么样, 期待高手出现.

JScript code
function dN(num, len){    var d = 0;    return num.toString().replace(/-?0?\.0*/, "").replace(/\d/g, function(v, i, s){        return i-d >= len ? '' : (s.indexOf(v) < i ? (d++,'') : v);    });}alert(dN(-0.303333351211745764444444444444444,5));
[解决办法]
试试看:

JScript code
<script type="text/javascript">var dN = function(num,len){    var s = num.toString().replace(/(?:^[^\d]*0*|[^\d])*/g,'').split('').reverse().join('').replace(/(\d)(?=.*\1)/g,'').split('').reverse();    s.length =len;    return s.slice(0).join('');};alert(dN(-0.233641464278,4));alert(dN(-0.303545,3));alert(dN(33766545,4));</script>
[解决办法]
正则效率并不会比直接循环更快,只是开发效率快而已。正则自身也是需要循环来判断的。

试试这个:
JScript code
function dN(num, len){    num = num.toString().replace(/^0+|\D+/g, "");    var dict = {};    var result = 0;    for (var i = 0; len > 0 && i < num.length; i++) {        var c = num.charAt(i);        if (!dict[c]) {            result *= 10;            result += parseInt(c);            len--;            dict[c] = true;        }    }    return result.toString();}alert(dN("0.123153422", 6)); 

读书人网 >JavaScript

热点推荐