正则表达式从字符串下面捕获日期

时间:2018-10-05 10:49:45

标签: javascript regex

以下是示例字符串,它是Flight No + Selling Code + Departure Date的组合。

航班No具有[A-Z]{2}\d{3,5}之类的模式,并且销售代码为单个字符。我要从中记录出发日期

AA78654UT2018年10月11日星期四SI9089U 2018年10月11日星期五WW0461X 2018年10月26日星期一GF00356Z 2018年10月26日星期日

我尝试过使用正则表达式,但未获得预期的输出结果

((?<=[A-Z]{2}\d{3,5}[A-Z, a-z]{1}).*[0-9]{4}((?<=[A-Z]{2}\d{3,5})|$))

预期输出为:
2018年10月11日星期四
2018年10月11日星期五
2018年10月26日星期一
2018年10月26日,星期日

能否请您帮我改进正则表达式以获取出发日期?

8 个答案:

答案 0 :(得分:1)

尝试以下操作

window.onload = function()
{

var source = 'AA78654UThursday 11 October 2018'

var regex = /[A-Z]{2}\d{3,5}\w{1}/g

var matches = regex.exec(source)

if (matches)
{
  source = source.replace(matches, "");
  
  console.log(source);
}

}

答案 1 :(得分:1)

这是正则表达式/.+((?:Sun|Mon|Tue|Wed|Thu|Fri|Sat).+)/

  1. 我使用非捕获括号列出了一周中每一天的3个首字母的所有可能性

  2. 捕获一周中的任何一天,都从不捕获括号中找到,后跟任意字符

var chains = [
  "AA78654UThursday 11 October 2018",
  "SI9089UFriday 11 October 2018",
  "WW0461XMonday 26 October 2018",
  "GF00356ZSunday 26 October 2018"
];
var pattern = /.+((?:Sun|Mon|Tue|Wed|Thu|Fri|Sat).+)/
var dates = [];
chains.forEach(function(chain) {
  $matches = chain.match(pattern);
  dates.push($matches[1]);
});

console.log(dates);

答案 2 :(得分:0)

您可以使用[A-Z]{2}\d{3,5}[A-Z, a-z]{1}(\D*[0-9]{1,2}\D*[0-9]{4})

这将使您想要的输出与捕获组(\D*[0-9]{1,2}\D*[0-9]{4})相匹配。它将匹配任意数量的非数字字符(日期),1-2个数字(以数字的日期表示),再匹配任何非数字字符以匹配月份,并匹配4个数字以匹配年份。

答案 3 :(得分:0)

您可以使用的正则表达式为 /((星期一|星期二|星期三|星期四|星期五|星期六|星期日)+。+ $#,但是最后一部分不包含捕获组。如果您还想捕获此部分,则应将整个正则表达式用括号括起来。

答案 4 :(得分:0)

您可以使用for ... in循环和String.replace()删除初始信息。

let dateArray = [
  'AA78654UThursday 11 October 2018',
  'SI9089UFriday 11 October 2018',
  'WW0461XMonday 26 October 2018',
  'GF00356ZSunday 26 October 2018'
];

const regex = /[A-Z]{2}\d{3,5}\S/g;

for (let i in dateArray) dateArray[i] = dateArray[i].replace(regex, '');

console.log(dateArray);

答案 5 :(得分:0)

对于刚出发的日期:

v$hd

说明

(Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)\s([123][0-9])\s(January|February|March|April|May|June|July|August|September|October|November|December)\s(\d{4})

匹配全部内容:

(Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)  // Match Day
\s  // Blank Space after day
([123][0-9])  // Match date
\s  // Blank Space after date
(January|February|March|April|May|June|July|August|September|October|November|December)  // Match month
\s  // Blank space after month
(\d{4})  // Match Year

第1组:航班号
第2组:销售代码
第3组:完整的出发日期
第4组:出发日
第5组:出发日期
第6组:出发月份
第7组:出发年份

答案 6 :(得分:0)

感谢您的所有答复。

在上述所有回复的帮助下,我构建了一个正则表达式以获取如下的出发日期

((?<=[A-Z]{2}\d{3,5}[A-Z, a-z]{1})(\D*[0-9]{1,2}\D*[0-9]{4}))

这很好用。

感谢帮助!

答案 7 :(得分:0)

可怜的男人的正则表达式。

/[A-Z][a-z]+day.+?\d{4}/g