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

时间:2015-07-01 17:18:17

标签: javascript regex node.js

我发现这个替换代码看起来像正则表达式,但我无法破译

new Date().toISOString().
  replace(/[z|t|\.]/gim," ").
  replace(/\d{3}\s$/gim, " ").
  replace(/:\d{2}\s+$/, " ").
  trim() + "\n")
抱歉,如果那个含糊不清。我不确定我在看什么

4 个答案:

答案 0 :(得分:4)

代码




  new Date()。toISOString()
  

&#xA ;

生成类似于此内容的内容

&#xA;&#xA; <前> 2015-07-01T17:21:22.123Z&#xA; & #xA;&#xA;

正则表达式将其格式化为

&#xA;&#xA;
  2015-07-01 17:21&#xA;  
&#xA;&#xA;

所有正则表达式都有标志 g m i 。直接来自regex101,这意味着:

&#xA;&#xA;
&#xA;

g修饰符:全局。所有比赛(首场比赛不回归)

&#xA; &#XA;

i修饰符:不敏感。不区分大小写的匹配(忽略[a-zA-Z]的情况)

&#xA; &#XA;

m修饰符:多行。导致^和$匹配每行的开头/结尾(不仅是字符串的开头/结尾)

&#xA;
&#xA;&#xA;

第一个正则表达式

&#xA;&#xA;
  [z | t | \。]&#xA;  
&#xA;&#xA;

实际上已经有了一个失误。编写它的人假设 | 表示或,但方括号内不是这种情况。它可以更好地写成

&#xA;&#xA;
  [zt \。]&#xA;  
&#xA;&#xA; < p>这将匹配2015-07-01 T 17:21:22 123 Z 然后替换

&# xA;&#xA;
  replace(/ [z | t | \。] / gim,“”)&#xA;  
&#xA;&#xA; < p>将用空格替换匹配该正则表达式的每个字符。给你新的字符串

&#xA;&#xA;
  2015-07-01 17:21:22 123&#xA;  
&#xA;& #xA;

下一个正则表达式 \ d {3} \ s $ 匹配并替换2015-07-01 17:21:22 123 ,为您提供:< &p>&#xA;&#xA;

  2015-07-01 17:21:22&#xA;  
&#xA;&#xA;

最后正则表达式:\ d {2} \ s + $ 匹配并替换2015-07-01 17:21 :22 ,为您提供

&#xA;& #xA;
  2015-07-01 17:21&#xA;  
&#xA;&#xA;

然后修剪额外的空格。

&#xA;&#xA;

总而言之,这并不是一种做你想做的事情的好方法。你可以用子串或者像其他人已经说过的那样做得更好。

&#xA;

答案 1 :(得分:2)

ISO字符串日期以如下格式打印日期:

2015-07-01T17:20:52.214Z

/[z|t|\.]/ - 似乎是[zt.]的错误类型 - 替换所有“z”,“t”或“。”字符。 g是全局的,i不区分大小写,m是多行的(因为ISO日期只有一行,所以没用)。这适用于所有regexen。

这将取代之前的T,最后Z的空格以及.之前的214

/\d{3}\s$/ - 3个数字后跟一个固定在该行末尾的空格。这将替换214以及从先前替换中添加的空间。

/:\d{2}\s+$/ - 一个冒号,后跟两个数字,后跟一个或多个固定在该行末尾的空格。这将替换:52(秒部分)以及之前替换所添加的空格。

.trim删除最终替换后添加到末尾的空格。你最终得到:

2015-07-01 17:20

...或当前年 - 月 - 日24小时:分钟

这很好,但可能不需要多次替换。如果您需要进行大量的日期格式化,我建议使用momentjs库,这使得这种事情变得非常简单。您也可以使用其他日期方法构建它,例如.getMonth

答案 2 :(得分:2)

更可读的方法是:

var date = new Date().toISOString();
date = date.substr(0, 10) + ' ' + date.substr(11, 8);

答案 3 :(得分:1)

不知道原因,但可以解释替换正在做什么

  .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