[英]Can Someone Explain this regex snippet?
我发现这替换代码看起来像正则表达式,但我无法破译
new Date().toISOString().
replace(/[z|t|\.]/gim," ").
replace(/\d{3}\s$/gim, " ").
replace(/:\d{2}\s+$/, " ").
trim() + "\n")
对不起,如果那是模糊的。 我不太确定我在看什么
编码
new Date().toISOString()
生成看起来像这样的东西
2015-07-01T17:21:22.123Z
正则表达式将它放入格式
2015-07-01 17:21
所有正则表达式都有标志g
, m
和i
。 直接来自regex101,这意味着:
g修饰符:全局。 所有比赛(首场比赛不返回)
我修饰语:不敏感。 不区分大小写的匹配(忽略[a-zA-Z]的情况)
m修饰符:多行。 导致^和$匹配每行的开头/结尾(不仅是字符串的开头/结尾)
第一个正则表达式
[z|t|\.]
实际上已经有一个错误。 谁写了它假设|
意思是or
但方括号内不是这种情况。 它可以更好地写成
[zt\.]
这将匹配2015-07-01 T
17:21:22 .
123 Z
然后更换
replace(/[z|t|\.]/gim," ")
将用空格替换匹配该正则表达式的每个字符。 给你新的字符串
2015-07-01 17:21:22 123
下一个正则表达式\\d{3}\\s$
匹配并替换2015-07-01 17:21:22 123
,给你:
2015-07-01 17:21:22
最后的正则表达式:\\d{2}\\s+$
比赛和替代2015年7月1日17:21 :22
,给你
2015-07-01 17:21
然后修剪掉额外的空间。
总而言之,这并不是一种很好的方式来做你想做的事情。 你可以用子串或者像其他人已经说过的那样做得更好。
ISO字符串日期以如下格式打印日期:
2015-07-01T17:20:52.214Z
/[z|t|\\.]/
[zt.]
z | t | /[z|t|\\.]/
[zt.]
/ - 似乎是[zt.]
的错误类型 - 替换所有“z”,“t”或“。” 字符。 g
是全局的, i
是不区分大小写的, m
是多行的(因为ISO日期只有一行,所以这里没用)。 这适用于所有regexen。
这将取代之前的T
,最后的Z
带有空格以及.
214
之前。
/\\d{3}\\s$/
- 后跟一个固定在行尾的空格。 这将替换214
和先前替换中添加的空间。
/:\\d{2}\\s+$/
- 冒号后跟两个数字,后跟一个或多个固定在行尾的空格。 这将替换:52
(秒部分)以及之前替换为末尾添加的空间。
.trim
删除最终替换后添加到最后的空格。 你最终得到:
2015-07-01 17:20
...或当前年 - 月 - 日24小时:分钟
这很好,但可能不需要多次替换。 如果你需要做很多日期格式化,我会推荐momentjs库,这使得这种事情变得非常容易。 您也可以使用其他日期方法(如.getMonth
构建它。
更可读的方法是:
var date = new Date().toISOString();
date = date.substr(0, 10) + ' ' + date.substr(11, 8);
不知道原因,但可以解释替换正在做什么
.replace(/[z|t|\.]/gim," ") // replace with space any z,t or .
// case insenzitive multiline
.replace(/\d{3}\s$/gim, " ") // replace with space a group of
// 3digits followed by 1 space at the
// end of string
.replace(/:\d{2}\s+$/, " ") // replace the group of :, 2 digits
// and at least 1 space from the tail
// of string with space
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.