繁体   English   中英

有人可以解释这个正则表达式片段吗?

[英]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

所有正则表达式都有标志gmi 直接来自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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM