【问题标题】:JavaScript: Parsing date string by string mask [closed]JavaScript:通过字符串掩码解析日期字符串 [关闭]
【发布时间】:2020-06-07 08:39:31
【问题描述】:

假设我有混合数据的字符串数组,例如

[“Sam”、“2019-01”、“USA”、“2019-03”、“Business”、“Whatever”、“10.000”...]

我必须只提取日期 ["2019-01", "2019-03" ...]

有没有通用的方法来使用带有 0000-00 掩码的正则表达式?

根据源数据,掩码可能是 0000-00、0000 (2019)、0000-00-00 (2015-03-25) 甚至 ABC 00 0000(2015 年 3 月 25 日)。

提前致谢。

【问题讨论】:

  • 甚至?请写出实际情况,不要留下未提及的可能相关细节。
  • 再一次,我有一个包含不同数据的字符串数组——名称、日期、类别等。我必须使用过滤器找到其中的所有日期。假设这个数组包含“2019-01”格式的日期。那么我必须做些什么才能得到 ["2019-01", "2019-03"]

标签: javascript arrays regex string date


【解决方案1】:

前面的答案很优雅,但实际上我正在寻找这个:

//2019-01 mask
var re = new RegExp(/[0-9]{4}\-[0-9]{2}/g, "i");
var str = "2019-01";

console.log(re.test(str)); //returns true

//Wed, 25 Sep 11
var re = new RegExp(/[A-Za-z]{3}\,\ [0-9]{2}\ [A-Za-z]{3}\ [0-9]{2}/g, "i");
var str = "Wed, 25 Sep 11";
console.log(re.test(str)); //returns true

【讨论】:

  • 虽然我一次只需要一个面罩并且必须控制它,但这种解决方案要好得多。此外,这个面具可以是任何东西,而不仅仅是一个日期。
【解决方案2】:

您可以简单地检查是否成功将其解析为Date 对象:

function isDate(str){
   return !!new Date(str).getTime()
}

const tests = [
    '02-20-2020',
    'MAR 03 2017',
    '3 9 op',
    'FEB 05 2000',
    '000-00-00',
    '2019-03'
];

function isDate(str){
   return !!new Date(str).getTime()
}

tests.forEach(t => console.log(isDate(t))); 
// output: true, true, false, true, false, true

【讨论】:

  • 有点工作,但对我的任务来说非常棒。干杯。
  • 这很不可靠,有各种字符串被某些实现识别为日期而不是其他实现,还有大量有效时间戳未被任何实现识别为日期。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
  • 2011-06-08
  • 2011-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多