正则需要用命名捕获组,如果js不支持,是否有替代方案?

解决方案 »

  1.   

    如LS所说,如果JS不支持,那就一个一个抠呗
      

  2.   

    二位是说用$1么,现在要做一个日期格式化的
    把yyyy-MM-dd转换为日期格式,但日期格式可能是MM-dd,也可能是d/M
    如果使用$1,我觉得比较难
    现在我倒是写了一个,但觉得不是很完美
      

  3.   


    代码的注解请访问:http://www.conis.cn/post/149.html

    //将字符串转换为日期
    /*
    本程序由Conis开发编写,任何人可以免费使用
    更多请访问:http://www.conis.cn
    */
    String.prototype.toDate = function(format) {
        pattern = format.replace(/(yyyy)/g, "([0-9]{4})")
        .replace(/(yy)|(MM)|(dd)|(hh)|(mm)|(ss)/g, "([0-9]{2})")
        .replace(/[Mdhms]/g, "([0-9]{1,2})");    //获取子表达式的索引
        getIndex = function(expr1, expr2) {
            var index = format.indexOf(expr1);
            if (index == -1) index = format.indexOf(expr2);
            return index;
        }    var today = new Date();
        var returnDate;
        if (new RegExp(pattern).test(this)) {
            var yPos = getIndex("yyyy", "yy");
            var mPos = getIndex("MM", "M");
            var dPos = getIndex("dd", "d");
            var hPos = getIndex("hh", "h");
            var miPos = getIndex("mm", "m");
            var sPos = getIndex("ss", "s");
            var data = { y: 0, m: 0, d: 0, h: 0, mi: 0, s: 0 };
            //对索引进行排序
            var pos = new Array(yPos + ",y", mPos + ",m", dPos + ",d", hPos + ",h", miPos + ",mi", sPos + ",s").sort(
                function(a, b) {
                    a = parseInt(a.split(",")[0]);
                    b = parseInt(b.split(",")[0]);
                    return a > b;
                }
            );        //删除索引为-1的数组
            var tmpIndex = 0;
            var newPos = new Array();
            for (var i = 0; i < pos.length; i++) {
                if (parseInt(pos[i].split(",")[0]) != -1) {
                    newPos[tmpIndex] = pos[i];
                    tmpIndex++;
                }
            }        //与当前文本进行匹配
            var m = this.match(pattern);
            for (var i = 1; i < m.length; i++) {            if (i == 0) return;
                var flag = newPos[i - 1].split(',')[1];
                data[flag] = m[i];
            };        data.y = data.y || today.getFullYear();             //年如果为空,则取当前年
            data.d = data.d || today.getDate();                 //天如果为空,则取今天
            //月不需要处理,因为月的0月是1月        //如果年是yy格式,则加上20
            if (data.y.toString().length == 2) data.y = parseInt("20" + data.y);
            data.m -= 1;
            returnDate = new Date(data.y, data.m, data.d, data.h, data.mi, data.s);
        }
        returnDate = returnDate || today;
        return returnDate;
    }document.writeln("<pre>测试结果");
    document.writeln("10月18日2008年 10点11分12秒".toDate("MM月dd日yyyy年 hh点mm分ss秒"));
    document.writeln("2008-10-8".toDate("yyyy-M-d"));           //2008年10月8号
    document.writeln("12-18 2008".toDate("MM-dd yyyy"));        //2008年12月18号
    document.writeln("12-16".toDate("MM-dd"));                  //2009年12月16号
    document.writeln("</pre>");
      

  4.   

    测试结果
    Sat Oct 18 10:11:12 UTC+0800 2008
    Wed Oct 8 00:00:00 UTC+0800 2008
    Thu Dec 18 00:00:00 UTC+0800 2008
    Wed Dec 16 00:00:00 UTC+0800 2009