簡體   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