js能否支持命名捕获组 正则需要用命名捕获组,如果js不支持,是否有替代方案?谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如LS所说,如果JS不支持,那就一个一个抠呗 二位是说用$1么,现在要做一个日期格式化的把yyyy-MM-dd转换为日期格式,但日期格式可能是MM-dd,也可能是d/M如果使用$1,我觉得比较难现在我倒是写了一个,但觉得不是很完美 代码的注解请访问: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>"); 测试结果Sat Oct 18 10:11:12 UTC+0800 2008Wed Oct 8 00:00:00 UTC+0800 2008Thu Dec 18 00:00:00 UTC+0800 2008Wed Dec 16 00:00:00 UTC+0800 2009 attachEvent为什么不起作用??寻求帮忙 js窗口刷新问题 疯了,高手看看document.getElementById vista下 如何无提示关闭网页 多个表格导出到excel中? jquery中变量的定义方式有2种? 使用IE自带打印功能,多框架打印不出现框架结构代码我已写出来了.要的请留下邮箱 只想问一下vml画出的图在哪些环境下可以看,为什么在win2003+ie6下看不到? 还是联动,又是JavaScipt惹祸. ie中如何定位光标的问题 web service问题 从下向上缓慢滑出菜单,类似于flash的那种柔和的效果
把yyyy-MM-dd转换为日期格式,但日期格式可能是MM-dd,也可能是d/M
如果使用$1,我觉得比较难
现在我倒是写了一个,但觉得不是很完美
代码的注解请访问: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>");
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