美文网首页
js混合字符串提取时间, JavaScript字符串提取时间

js混合字符串提取时间, JavaScript字符串提取时间

作者: 执笔于情 | 来源:发表于2022-05-17 18:15 被阅读0次

    最近帮同事一个忙, 根据一堆混合字符串, 给时间和备注单独一行, 利于整理表格
    那么就涉及到从混合字符串中提取出时间, 然后再把两个时间之间的字符串拼接

    • 先看字符串

    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 柜子已经提到,已经安排拆柜,预计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


    期待效果, 时间一行, 备注一行
    那么就先分析一波正则

    • 年: 四位数字就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为校验数字, {xxx}可以校验多少个字符, /g是全局, 那么
      console.log(str.match(/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/g))这样不就行了?
      看控制台结果
      match方法.png
      是不是很快就把时间提取出来了, 然后再通过字符串切割, 不就达到了效果吗
    // 我这里假设str是等于上面的混合字符串哈, 因为在这里复制太长, 网页显示是直接横向滚动条, 影响网友阅读
    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位数, 如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循环搞定
    如果对你有帮助, 动动小手点个赞哦

    相关文章

      网友评论

          本文标题:js混合字符串提取时间, JavaScript字符串提取时间

          本文链接:https://www.haomeiwen.com/subject/veynurtx.html