js混合字符串提取時間, JavaScript字符串提取時間

最近幫同事一個忙, 根據(jù)一堆混合字符串, 給時間和備注單獨一行, 利于整理表格
那么就涉及到從混合字符串中提取出時間, 然后再把兩個時間之間的字符串拼接

  • 先看字符串

2022-03-29 13:10:40Australia Delivered2022-03-28 09:58:48Sydney Express pickup2022-03-21 10:55:49Sydney finish customs clearance2022-03-14 14:00:39Sydney Customs clearance in progress2022-03-14 11:33:15Sydney Flight arrived2022-03-13 23:09:30hongkong 航班已起飛2022-03-11 20:19:22hongkong 柜子已經(jīng)提到,已經(jīng)安排拆柜,預計3.13日航班2022-03-10 17:40:48hongkong 預計3月11日提柜2022-03-09 11:08:43hongkong由于香港疫情,很多拖車被政府征收,導致柜子在港無法提回來,航 展開詳情2022-03-09 11:06:41hongkong由于香港疫情,很多拖車被政府征收,導致柜子在港無法提回來,航 展開詳情2022-03-07 19:16:47CHINA Origin Scan2022-03-04 17:55:39深圳 已安排下港,預計3月9日起飛2022-03-04 17:53:21CHINA Origin Scan2022-03-04 17:29:34CHINA The package has been picked up from the sender2022-03-04 10:15:10CHINA Order information received


期待效果, 時間一行, 備注一行
那么就先分析一波正則

  • 年: 四位數(shù)字就ok, 比如[0-9]{4}
  • 月: 一共十二個月, 分兩種情況, 01-09, 10-12, 所以得(0[1-9]1[0-2])
  • 日: 最大就31天, 01-09, 10-19, 20-19, 30-31, 所以可以寫(0[1-9]|[12][0-9]|3[01])
  • 時: 最大就24小時, 可分為(0?[0-9]|1[0-9]|2[0-3])
  • 分: 最大是59分, 可以做為(0?[0-9]|[1-5][0-9])
  • 秒: 同上, 最大就是59秒
    年月日的正則可分為var reg = /^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/;
    console.log(reg.test('2022-05-17')
    時分秒的正則可分為var reg = /^(0?[0-9]|1[0-9]|[2][0-3]):(0?[0-9]|[1-5][0-9]):(0?[0-9]|[1-5][0-9])$/;
    console.log(reg.test('23:59:59')
    但是我感覺這樣寫太麻煩, 我又不是校驗格式, 所以就用到match()方法
    比如我要校驗一串混合字符var str = '2022-03-29 13:10:40Australia Delivered2022-03-28 09:58:48Sydney Express pickup2022-03-21 10:55:49Sydney finish customs clearance'
    可以分析一波
  • \d為校驗數(shù)字, {xxx}可以校驗多少個字符, /g是全局, 那么
    console.log(str.match(/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/g))這樣不就行了?
    看控制臺結果
    match方法.png

    是不是很快就把時間提取出來了, 然后再通過字符串切割, 不就達到了效果嗎
// 我這里假設str是等于上面的混合字符串哈, 因為在這里復制太長, 網(wǎng)頁顯示是直接橫向滾動條, 影響網(wǎng)友閱讀
var str = "開頭的字符串";
var arr = str.match(/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/g);
var arr1 = [];
for(let i = 0; i < arr.length; i++) {
    if(str.indexOf(arr[i]) != -1) {
        // 這里后面加19是因為時間格式加上空格, 是19位數(shù), 如2022-05-17 18:15:00
        arr1.push(str.slice(str.indexOf(arr[i]), str.indexOf(arr[i])+19);
        // 這里的第二次push應該可以看懂吧, 第一個push, 添加進去的是時間,
        // 第二個push, 添加進去的是上一個時間后, 和下一個時間中間的文字, 也就是上面說的備注
        arr1.push(str.slice(str.indexOf(arr[i])+19, str.indexOf(arr[i+1])));
    }
}
console.log(arr1)

讓我們看一下結果


結果.png

是不是達到了想要的效果, 后面想怎么來就怎么來, 一個for循環(huán)搞定
如果對你有幫助, 動動小手點個贊哦

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容