标签:
RegExp中的$1...$9属性:
返回在模式匹配期间找到的,所存储的最近9个部分。
每当产生一个带括号的成功匹配时,$1...$9的属性值就会被修改,可以在一个正则表达式中指定任意多个带括号的子匹配,但是最多只能存储9个。
例:
<script type="text/javascript"> var pattern = /(\w+)@(\w+)\.(\w+)/g, str = "Please send mail to george@contoso.com and someone@example.com. Thanks!", result = pattern.test(str); alert(RegExp.$1+"-"+RegExp.$2+"-"+RegExp.$3); </script>打印:george-contoso-com。
RegExp.$1匹配第一个带括号的子匹配,打印:george,依次类推,RegExp.$2匹配第二个带括号的子匹配,所以打印:contoso。
然后分析日期格式转换:
如给定要转换的日期格式为"yyy-MM-dd"。
如果我们要获取这个格式的年份,考虑到RegExp.$1的特性,我们可以通过/(y+)/的方式匹配该格式,获取年份的位数,然后截取当前日期的年份信息后替换即可。
如:
<script type="text/javascript"> var pattern = "yyy年", result = /(y+)/.test(pattern), year = String(new Date().getFullYear()); pattern = pattern.replace(RegExp.$1,year.substr(4-RegExp.$1.length)); alert(pattern); </script>所以,我们可以根据这种方式写出日期转换的代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>无标题文档</title> </head> <body> </body> <script type="text/javascript"> Date.prototype.format = function(pattern){ if(typeof pattern === "undefined" || pattern === null) { pattern = "yyyy年MM月dd日 HH时mm分ss秒"; } var val = { "M+":this.getMonth() + 1, //月份 "d+":this.getDate(), //日 "H+":this.getHours(), //小时 "m+":this.getMinutes(), //分钟 "s+":this.getSeconds() //秒 }; if(/(y+)/.test(pattern)) { var year = String(this.getFullYear()); pattern = pattern.replace(RegExp.$1,year.substr(4-RegExp.$1.length)); } for(var i in val) { if(new RegExp("("+i+")").test(pattern)) { //如果只匹配一个值,如果该数<10,那么不加0,否则仍然为两位数,否则如果为2位数,<10则补0 var temp = (RegExp.$1.length === 1)?val[i]:("00"+val[i]).substr(String(val[i]).length); pattern = pattern.replace(RegExp.$1,temp); } } return pattern; }; alert(new Date().format("yyy年M月")); </script> </html>
标签:
原文地址:http://blog.csdn.net/xuzengqiang2/article/details/44003345