我有以下字符串
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
(在航班号之后)
您能帮助我使用正则表达式提取此数据吗?
答案 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将其显示为逗号分隔。
$
(XX\d{4})\*\*[A-Z]\*\*|(.*?(?=XX\d{4}|$))
或者您可以结合使用map和split来创建一个多维数组,其中第一个值例如是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
标志来匹配最后一个索引。