求助new RegExp("(" + k + ")")怎么理解?

wudichaoren2011 2015-09-16 07:59:55



// 对Date的扩展,将 Date 转化为指定格式的String
// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
// 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
// 例子:
// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
// (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
Date.prototype.Format = function (fmt) { //author: meizz
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"h+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
}





for (var k in o)
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));




这里的K是什么意思?

new RegExp("(" + k + ")")怎么理解?为什么要写成("(" + k + ")")这样?



if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));


这行代码什么意思?

...全文
614 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xlfdyzcs0 2018-01-10
  • 打赏
  • 举报
回复
你现在应该懂了,但是我为了后面的人还总结得列一下: for (var k in o)这个K不知道代表什么 //K是O里面的各个属性,即m+ d+ h+.....可以理解为索引 RegExp("(" + k + ")")这个K代表着字母 //这是字符串拼接 将(K)作为参数生成新的正则,为了实现RegExp.$1等正则对象,故加()。 o[k]我觉得这个K代表数字 //这个代表o里面K这个属性,选取到这个属性。 这三个K的意思是一样的吗?//都代表o里面的属性对象 if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); //这行代码的意思是:如果 new RegExp("(" + k + ")") 这个用o里面属性新创建的正则对象在 fmt这个从外面传进来的参数里 存在(一般fmt是日期格式如 yyyy-MM-dd HH:mm:SS,则将fmt替换为传进来对应的日期格式。 =====================多有不妥之处,还望指出。---小李飞刀燕子抄水
天际的海浪 2015-09-16
  • 打赏
  • 举报
回复
引用 5 楼 wudichaoren2011 的回复:
[quote=引用 4 楼 jslang 的回复:] [quote=引用 2 楼 wudichaoren2011 的回复:] [quote=引用 1 楼 jslang 的回复:] 如k的值是"M+" "(" + k + ")"的结果是字符串"(M+)" 然后用这个字符串来创建正则表达式。
直接写成new RegExp(k) 这样行吗?[/quote] 不行。加括号是为了在正则表达式中捕获子匹配,这样才能更新之后代码用到的RegExp.$1的值 [/quote] for (var k in o)这个K不知道代表什么 RegExp("(" + k + ")")这个K代表着字母 o[k]我觉得这个K代表数字 这三个K的意思是一样的吗?[/quote] 这三个K的意思是一样的 我说,你先去学学js和正则表达式的基础吧,没有基础你的问题会越问越多的
天际的海浪 2015-09-16
  • 打赏
  • 举报
回复
引用 3 楼 wudichaoren2011 的回复:
("(" + k + ")") 括号里面包含括号怎么理解? 那两个加号是什么意思?
里面的括号在字符串的“”引号内,是个字符串 外面的括号是调用RegExp函数的语法 这样写你是否能理解呢 str = "("; str = str + k; str = str + ")"; new RegExp(str)
wudichaoren2011 2015-09-16
  • 打赏
  • 举报
回复


if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
new RegExp("(" + k + ")")这个是匹配哪个字母的? o[k]是哪个字母? RegExp.$1是yyyy还是mmm?
wudichaoren2011 2015-09-16
  • 打赏
  • 举报
回复
引用 4 楼 jslang 的回复:
[quote=引用 2 楼 wudichaoren2011 的回复:] [quote=引用 1 楼 jslang 的回复:] 如k的值是"M+" "(" + k + ")"的结果是字符串"(M+)" 然后用这个字符串来创建正则表达式。
直接写成new RegExp(k) 这样行吗?[/quote] 不行。加括号是为了在正则表达式中捕获子匹配,这样才能更新之后代码用到的RegExp.$1的值 [/quote] for (var k in o)这个K不知道代表什么 RegExp("(" + k + ")")这个K代表着字母 o[k]我觉得这个K代表数字 这三个K的意思是一样的吗?
天际的海浪 2015-09-16
  • 打赏
  • 举报
回复
引用 2 楼 wudichaoren2011 的回复:
[quote=引用 1 楼 jslang 的回复:] 如k的值是"M+" "(" + k + ")"的结果是字符串"(M+)" 然后用这个字符串来创建正则表达式。
直接写成new RegExp(k) 这样行吗?[/quote] 不行。加括号是为了在正则表达式中捕获子匹配,这样才能更新之后代码用到的RegExp.$1的值
wudichaoren2011 2015-09-16
  • 打赏
  • 举报
回复
("(" + k + ")") 括号里面包含括号怎么理解? 那两个加号是什么意思?
wudichaoren2011 2015-09-16
  • 打赏
  • 举报
回复
引用 1 楼 jslang 的回复:
如k的值是"M+" "(" + k + ")"的结果是字符串"(M+)" 然后用这个字符串来创建正则表达式。
直接写成new RegExp(k) 这样行吗?
天际的海浪 2015-09-16
  • 打赏
  • 举报
回复
如k的值是"M+" "(" + k + ")"的结果是字符串"(M+)" 然后用这个字符串来创建正则表达式。

87,988

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧