您的位置:首页 > Web前端 > JavaScript

JavaScript日期格式化与正则表达式RegExp.$的用法

2009-03-03 17:15 337 查看
今天有空就开写一个Calendar日历,在网上看到一个牛人写的JavaScript日期格式化的代码,看了一会有点晕。代码奉上:

/**
* @param   d the delimiter
* @param   p the pattern of your date
* @author  meizz
* @author  kimsoft add w+ pattern
*/
Date.prototype.format = function(style) {
var o = {
"M+" : this.getMonth() + 1, //month
"d+" : this.getDate(),      //day
"h+" : this.getHours(),     //hour
"m+" : this.getMinutes(),   //minute
"s+" : this.getSeconds(),   //second
"w+" : "/u65e5/u4e00/u4e8c/u4e09/u56db/u4e94/u516d".charAt(this.getDay()),   //week
"q+" : Math.floor((this.getMonth() + 3) / 3),  //quarter
"S"  : this.getMilliseconds() //millisecond
}
if (/(y+)/.test(style)) {
style = style.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for(var k in o){
if (new RegExp("("+ k +")").test(style)){
style = style.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
}
}
return style;
};


看到上面代码有RegExp.$1,很茫然。查了一下才知道:

$1…$9是RegExp的一个属性, $1…$9:表示第n组匹配的结果,这个在正则表达式里有多个以()分组时有用。

JScript中String对象与正则表达式有关的操作有一个叫replace,可是要如何在replace中使用正则表达式匹配的结果呢?

这时候我们就需要用到“匹配变量”了,匹配变量用于表示正则匹配的结果,以下是匹配变量的说明:
$& -- 表示全部匹配组匹配的结果,最后再啰嗦一次,匹配组就是正则表达式的()分组
$$ -- 表示$字符,因为匹配变量用掉了$字符,所以需要转义
$n -- 类似前面的$1…$9,表示第n组匹配的结果
$nn -- 很简单就是第nn组匹配的结果
$` -- 就是前面提到过的leftContext,比如abcdefg被匹配出了d那么abc就是它的leftContext了
$' -- 和上面符合很接近不要看错了!,这个就是rightContext了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: