我下面有一个字符串:
var deptInfo = "Flight-1 08:30~Flight-1 10:45|Flight-2 15:15~Flight-2 17:30"
我想以以下格式获取信息:
var timeSlot = ["08:30-10:45","15:15-17:30"]
我正在尝试像这样拆分deptInfo
:
var timeSlot = deptInfo.split("(Flight-1 )|(~Flight-1 )").join('-').split('|').join(',').split("(Flight-2 )|(~Flight-2 )").join('-');
var timeSlot = deptInfo.split(/Flight-1 ~Flight-1 /).join('-').split('|').join(',').split(/Flight-2 ~Flight-2 /).join('-');
但是,这并没有达到预期的结果。有人可以帮忙吗?
答案 0 :(得分:3)
您可以使用以下模式提取必要的位,然后对匹配项进行后处理以获取必要的输出:
/(\d{2}:\d{2})~Flight-\d+\s*(\d{2}:\d{2})/g
请参见regex demo。请注意,如果您要确保开头和后两位数字不以字符char \b
开头/后跟,则甚至可以用/\b(\d{2}:\d{2})~Flight-\d+\s*(\d{2}:\d{2})\b/g
(单词边界)来包装模式。
详细信息
(\d{2}:\d{2})
-第1组:2位数字,:
,2位数字~Flight-\d+
-一个~Flight-
子字符串,然后是1个以上的数字\s*
-超过0个空格(\d{2}:\d{2})
-第2组:2位数字,:
,2位数字JS用法:
var rx = /(\d{2}:\d{2})~Flight-\d+\s*(\d{2}:\d{2})/g;
var s = "Flight-1 08:30~Flight-1 10:45|Flight-2 15:15~Flight-2 17:30";
var m, res = [];
while (m = rx.exec(s)) {
res.push(m[1] + "-" + m[2]);
}
console.log(res);