使用多个选择器分割字符串

时间:2018-08-16 07:27:40

标签: regex

我下面有一个字符串:

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('-');

但是,这并没有达到预期的结果。有人可以帮忙吗?

1 个答案:

答案 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);