正则表达式航班号和日期

时间:2018-09-04 14:00:09

标签: javascript jquery regex

我有以下字符串

west wing

要提取以下格式的数据:

航班号: XX1366**A**Monday 5 November 2018XX4515**B**Monday 5 November 2018XX3416**C**Monday 17 December 2018XX1744**D**Tuesday 18 December 2018

航班日期: XX1366,XX4515,XX3416,XX1744

我的代码: Monday 5 November 2018, Monday 5 November 2018, Monday 17 December 2018, Tuesday 18 December 2018(在航班号之后)

您能帮助我使用正则表达式提取此数据吗?

4 个答案:

答案 0 :(得分:1)

这可能有点麻烦,但应该可以,您可以轻松调整它:

(XX[0-9]+)([A-Z])([a-zA-Z]+ [0-9]+ [a-zA-Z]+ [0-9]+)

请注意,您始终可以在https://regexr.com/等网站上在线测试正则表达式

答案 1 :(得分:1)

当然不是最优雅的解决方案,但是以下方法也可以:

XX(\d*)(\w)(\w*\s\d+\s\w*\s\d*)

作为旁注,以防万一您想知道-如果您事先做出了一些努力,网站上的人更有可能回答您的问题。基本上,这是一个提供编码帮助的论坛,而不是按需编写代码的论坛。 :)

答案 2 :(得分:0)

打开选项可以是使用2个捕获组来匹配XX后跟4位数字或匹配任何字符,并使用正向前行断言紧随其后的是XX后跟4位数字或字符串{{1}的末尾}

然后在循环匹配时,将值收集到一个数组中,并使用join将其显示为逗号分隔。

$

Regex demo

(XX\d{4})\*\*[A-Z]\*\*|(.*?(?=XX\d{4}|$))

或者您可以结合使用mapsplit来创建一个多维数组,其中第一个值例如是const regex = /(XX\d{4})\*\*[A-Z]\*\*|(.*?(?=XX\d{4}|$))/g; const str = `XX1366**A**Monday 5 November 2018XX4515**B**Monday 5 November 2018XX3416**C**Monday 17 December 2018XX1744**D**Tuesday 18 December 2018`; let m; let flights = []; let flightDates = []; while ((m = regex.exec(str)) !== null) { if (m.index === regex.lastIndex) { regex.lastIndex++; } if (m[1]) { flights.push(m[1]); } if (m[2]) { flightDates.push(m[2]); } } console.log("Flight No: " + flights.join(',')); console.log("Flight Date: " + flightDates.join(', '));,第二个值是XX1366,然后可以提取这些价值观。首先在正向搜索Monday 5 November 2018上拆分,然后在匹配的(?=XX\d{4})上拆分

\*\*[A-Z]\*\*

const str = `XX1366**A**Monday 5 November 2018XX4515**B**Monday 5 November 2018XX3416**C**Monday 17 December 2018XX1744**D**Tuesday 18 December 2018`;
let res = str.split(/(?=XX\d{4})/)
    .map(x => x.split(/\*\*[A-Z]\*\*/)
    );

答案 3 :(得分:0)

我认为此正则表达式可以帮助您:

航班号(XX[0-9]+) 航班日期[MTWFS][a-z]+ [0-9]{1,2} [a-zA-Z]+ [0-9]{4} 代码(?<=\*)([A-Z])

您可以使用/y标志来匹配最后一个索引。