使用正則表達(dá)式匹配時(shí)間格式字符串的小心得

在寫(xiě)接口的時(shí)候遇到一個(gè)這樣的問(wèn)題舌厨,我調(diào)用的 MAPI 接口返回給我一個(gè)這樣的時(shí)間格式:

"/Date(1546012800000+0800)/",而我需要把它轉(zhuǎn)化成這種格式:2019-05-23 12:34:22(北京時(shí)間)颤陶,并作為入?yún)鹘o另一個(gè) MAPI 接口挣郭。

第一時(shí)間想到的解決辦法就是看看框架中是否帶有這種時(shí)間戳處理的功能蛔琅,發(fā) 現(xiàn)大多是直接處理時(shí)間戳的,像這種:1554362965奈辰,所以需要把得到的時(shí)間格 式進(jìn)行處理一下:
首先括號(hào)及括號(hào)兩邊的字符是不需要的,另外乱豆,+0800 是時(shí)區(qū)差奖恰,表示北京時(shí) 間,所以+0800 也可以不需要宛裕。要取出 1546012800000 至少有兩種方式瑟啃,第一 種就是正則表達(dá)式,第二種就是字符串截取函數(shù) slice()揩尸、substring()蛹屿、substr()。

首先說(shuō)正則表達(dá)式岩榆,因?yàn)楦袷绞遣蛔兊拇砀海覀兙椭灰プ∷牟蛔凕c(diǎn)和變點(diǎn),這個(gè)時(shí)間格式中勇边,只有 1546012800000 是變的犹撒,所以第一個(gè)可用的正則表達(dá)式 可以這樣寫(xiě):

結(jié)果驗(yàn)證01.png

解釋一下這個(gè)正則表達(dá)式:
第一個(gè)字符“/”是正則表達(dá)式的開(kāi)始,第二個(gè)字符“\”是轉(zhuǎn)義符粒褒,因?yàn)樽址袔?有“/”识颊,屬于元字符,所以我們需要用轉(zhuǎn)義符轉(zhuǎn)義一下奕坟,/Date 是字符串中的內(nèi) 容祥款,因?yàn)楦袷讲蛔儯@個(gè)地方可以直接匹配月杉。然后又出現(xiàn)了“\”刃跛,因?yàn)楹竺娴?br> “ (”也是屬于元字符,因此我們還是需要“\”轉(zhuǎn)義符苛萎,之后的( ) 就是分組奠伪,\d 表 示數(shù)字,*表示數(shù)字在文本中出現(xiàn)零次或連續(xù)多次首懈,+號(hào)表示以+號(hào)結(jié)尾绊率,最后 以“/”結(jié)束整個(gè)正則表達(dá)式。

match() 方法可在字符串內(nèi)檢索指定的值究履,或找到一個(gè)或多個(gè)正則表達(dá)式的匹 配滤否,返回指定的值,存放匹配結(jié)果的數(shù)組最仑。

這個(gè)方法很大程度上有賴(lài)于你所寫(xiě) 的正則表達(dá)式是否包含 g藐俺,如果沒(méi)有 g炊甲,那么 match() 方法就只能在 str 中執(zhí)行 一次匹配。如果沒(méi)有找到任何匹配的文本欲芹,match() 將返回 null卿啡。否則,它將 返回一個(gè)數(shù)組菱父,其中存放了與它找到的匹配文本有關(guān)的信息颈娜。該數(shù)組的第 0 個(gè) 元素存放的是匹配文本,而其余的元素存放的是與正則表達(dá)式的子表達(dá)式匹配 的文本浙宜。除了這些常規(guī)的數(shù)組元素之外官辽,返回的數(shù)組還含有兩個(gè)對(duì)象屬性。 index 屬性聲明的是匹配文本的起始字符在 str 中的位置粟瞬,input 屬性存放的是 你要匹配的文本同仆。如果有 g,則 match() 方法會(huì)全局檢索裙品,找到 str 中所有匹配 的子字符串俗批,全局匹配到子串時(shí)返回的數(shù)組中沒(méi)有 index 屬性或 input 屬性。 上面的正則表達(dá)式還可以這樣寫(xiě)市怎,結(jié)果也是一樣的扶镀。

結(jié)果驗(yàn)證02.png

直接從 Date 開(kāi)始匹配,正則表達(dá)式就更簡(jiǎn)短了焰轻。

上面提到寫(xiě)正則表達(dá)式就是要抓住文本中的不變點(diǎn)和變點(diǎn)臭觉,所以它抓住的不變 點(diǎn)在: /Date( 和 +,而如果不變點(diǎn)在這里: ( 和 +辱志,那么我們的正則表達(dá) 式就應(yīng)該這么寫(xiě)了:

結(jié)果驗(yàn)證03.png

對(duì)于上面這個(gè)正則蝠筑,其他的不用多解釋?zhuān)琝w 和+號(hào)可以說(shuō)一說(shuō)。
\w 用來(lái)匹配字母揩懒、數(shù)字和下劃線什乙,而后面的+號(hào)表示在文本中連續(xù)出現(xiàn)一次或 多次。這個(gè)正則中的第三個(gè)+號(hào)是文本中的+號(hào)已球,由于+號(hào)是元字符臣镣,所以我們 需要用“\”進(jìn)行轉(zhuǎn)義一下。 另外再說(shuō)一個(gè)分組的問(wèn)題智亮,如果上面的字符串我們要把+0800 也匹配進(jìn)來(lái)忆某,可 以在正則表達(dá)式中多加一對(duì)括號(hào),像下面這樣:

結(jié)果驗(yàn)證04.png

第一個(gè)正則表達(dá)式我們只匹配到了 1546012800000阔蛉,因?yàn)樗荒茏R(shí)別 /Date(xxx弃舒,上面這個(gè)正則表達(dá)式還可以識(shí)別/Dyzc(,例如:

結(jié)果驗(yàn)證05.png

簡(jiǎn)單說(shuō)一下元字符:

元字符:有特殊含義,以至于不能表示原本意義的字符聋呢。 除了正則表達(dá)式苗踪,HTML、XML削锰、URL通铲,到處都有元字符,并且他們的元字符 還不一定一樣器贩。
HTML:
空格( )不表示空格颅夺, 只能用 ? 來(lái)表示空格。
大于號(hào)(>)不能表示大于號(hào)磨澡,只能用 < 來(lái)表示大于號(hào)
URL 中碗啄,例如:https://www.baidu.com/?search=x%20y
這個(gè) URL 中的%20 其實(shí)是個(gè)空格质和。 因?yàn)?URL 規(guī)定里面只能包含很少的幾十種 字符稳摄,其中空格就是被禁用的,不能包含空格饲宿,那不能包含空格而用戶的確需 要表示空格厦酬,怎么辦呢?
用另外的東西代表空格,在 URL 中瘫想,就是%20
因此
https://www.baidu.com/?search=x%20y
等于
https://www.baidu.com/?search=x y
但是下面這個(gè) url 是不合法仗阅,所以要被「轉(zhuǎn)義」為上面這個(gè)。
url 或者 cookie 中一般一大堆%數(shù)字 1国夜、%數(shù)字 2 的减噪,全是%開(kāi)頭的,這都是套 路车吹。
正則表達(dá)式中可以用/來(lái)把元字符轉(zhuǎn)義成他本來(lái)的意思筹裕,
/ => / ( => ( + => +
HTML 中是以為&開(kāi)頭,;結(jié)尾的窄驹。
URL 中是以%開(kāi)頭朝卒。
正則表達(dá)式是以/開(kāi)頭,/結(jié)尾的乐埠。

不同的語(yǔ)言有不同的規(guī)定抗斤,因?yàn)樵O(shè)計(jì)他們時(shí),可用字符是不一樣的丈咐。

終于說(shuō)完了正則表達(dá)式瑞眼,下面來(lái)說(shuō)說(shuō)第二種獲取"/Date(1546012800000+0800)/" 中 1546012800000 的方法,個(gè)人覺(jué)得用字符串截取函數(shù)來(lái)獲取也同樣是要抓住
不變點(diǎn)和變點(diǎn)棵逊,只有抓住這兩個(gè)负拟,就很好解決這個(gè)問(wèn)題了。因?yàn)榉祷氐臅r(shí)間格 式是固定的歹河,所以我們可以從/開(kāi)始數(shù)掩浙,第 6 個(gè)(index=6)開(kāi)始花吟,然后以+號(hào)結(jié) 束,拿到的剛好是 1546012800000厨姚,下面我借助一下 indexOf 來(lái)獲取到+號(hào)的位置:

結(jié)果驗(yàn)證06.png

indexOf() 方法可返回某個(gè)指定的字符串值在字符串中首次出現(xiàn)的位置衅澈。第一個(gè) 參數(shù)是必須的,就是要檢索的字符串值谬墙,它還可以傳入第二個(gè)參數(shù)今布,必須是個(gè) 整數(shù),從 0 開(kāi)始拭抬,表示從字符串中開(kāi)始檢索的位置部默,比如說(shuō)你想從第 6 個(gè)字符 開(kāi)始檢索,就可以傳 5造虎,最大的取值就是 str.length-1傅蹂。如果省略就是從首字符開(kāi) 始檢索。

再說(shuō)一下 substr()函數(shù): substr()方法返回從指定位置開(kāi)始的字符串中指定字符數(shù)的字符算凿,第一個(gè)參數(shù)是 指定開(kāi)始的位置份蝴,第二個(gè)參數(shù)是截取的長(zhǎng)度。 這里的第二個(gè)參數(shù)長(zhǎng)度就是用+號(hào)的位置減去前面不需要的 6 個(gè)字符氓轰,得到的就 是我們真正要的時(shí)間戳婚夫。

結(jié)果驗(yàn)證07.png
結(jié)果驗(yàn)證08.png

而 slice()、substring()就更更簡(jiǎn)單了了署鸡。

結(jié)果驗(yàn)證09.png

slice()和 substring()方法都是返回一個(gè)索引和另一個(gè)索引之間的字符串案糙。所以這 里只需要傳+號(hào)的位置就行,而且這兩個(gè)文法第二個(gè)參數(shù)都不包含該索引位置的
字符靴庆。具體可以參考下面這篇文章时捌。
https://juejin.im/post/59e2af3151882578cf573319
拿到時(shí)間戳之后就可以直接用框架中的工具,把 1558281600000 轉(zhuǎn)換成 2019-5- 20 0:0:0撒穷。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末匣椰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子端礼,更是在濱河造成了極大的恐慌禽笑,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛤奥,死亡現(xiàn)場(chǎng)離奇詭異佳镜,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)凡桥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)蟀伸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事啊掏〈缆纾” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵迟蜜,是天一觀的道長(zhǎng)刹孔。 經(jīng)常有香客問(wèn)我,道長(zhǎng)娜睛,這世上最難降的妖魔是什么髓霞? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮畦戒,結(jié)果婚禮上方库,老公的妹妹穿的比我還像新娘。我一直安慰自己障斋,他們只是感情好纵潦,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著配喳,像睡著了一般酪穿。 火紅的嫁衣襯著肌膚如雪凳干。 梳的紋絲不亂的頭發(fā)上晴裹,一...
    開(kāi)封第一講書(shū)人閱讀 49,806評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音救赐,去河邊找鬼涧团。 笑死,一個(gè)胖子當(dāng)著我的面吹牛经磅,可吹牛的內(nèi)容都是我干的泌绣。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼预厌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼阿迈!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起轧叽,我...
    開(kāi)封第一講書(shū)人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤苗沧,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后炭晒,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體待逞,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年网严,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了识樱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖怜庸,靈堂內(nèi)的尸體忽然破棺而出当犯,到底是詐尸還是另有隱情,我是刑警寧澤割疾,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布灶壶,位于F島的核電站,受9級(jí)特大地震影響杈曲,放射性物質(zhì)發(fā)生泄漏驰凛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一担扑、第九天 我趴在偏房一處隱蔽的房頂上張望恰响。 院中可真熱鬧,春花似錦涌献、人聲如沸胚宦。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)枢劝。三九已至,卻和暖如春卜壕,著一層夾襖步出監(jiān)牢的瞬間您旁,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工轴捎, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鹤盒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓侦副,卻偏偏與公主長(zhǎng)得像侦锯,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子秦驯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348