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