最近帮同事一个忙, 根据一堆混合字符串, 给时间和备注单独一行, 利于整理表格
那么就涉及到从混合字符串中提取出时间, 然后再把两个时间之间的字符串拼接
- 先看字符串
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循环搞定
如果对你有帮助, 动动小手点个赞哦
网友评论