RegEx 从时间中提取日期

RegEx to extract Date from time

我有以下日期和时间,并希望使用 RegEx

将其转换为简单数字

我有:2017-11-02T04:00:00Z

我想将其转换为:20171102(包括 months/dates 的前导零)

RegEx 可以吗?在使用“^(.*?)-”

工作数小时后只能获得“2017-”

似乎越来越难了,任何帮助都非常感谢

编辑:显示我正在尝试的地方。我正尝试在 Nintex for SharePoint 上执行此操作。但在此之前,我正在使用 www.regEx101.com 来验证

^\d{4}-\d{2}-\d{2}怎么样?

这将恰好匹配四位数字,后跟一个连字符,然后是 2 位数字,然后是另一个连字符,然后是另外 2 位数字。

var str = "2017-11-02T04:00:00Z";
var res = str.match(/^\d{4}-\d{2}-\d{2}/)[0];
console.log(res);

将以下正则表达式与 替换 模板一起使用:

^(\d{4})-(\d{2})-(\d{2}).*

并提供


作为替换模式。

详情

  • ^ - 字符串开头
  • (\d{4}) - 第 1 组(稍后通过替换模式中的 </code> 反向引用引用):四位数 </li> <li><code>- - 一个连字符
  • (\d{2}) - 第 1 组(后来用替换模式中的 </code> 反向引用引用):两位数 </li> <li><code>- - 一个连字符
  • (\d{2}) - 第 3 组(后来用替换模式中的 </code> 反向引用引用):两位数 </li> <li><code>.* - 字符串的其余部分。

参见regex demo

无法从正则表达式的匹配组中排除字符,因此您必须使用三个匹配组。我使用命令行 sed 来试验正则表达式。下面是一些输出来说明我的意思:

$ echo '2017-11-02T04:00:00Z'|sed 's/^\([0-9]*\)-\([0-9]*\)-\([0-9]*\)T.*$//'
20171102

此命令在单独的捕获组中匹配任意长度数字的每个序列,然后用这三个组替换整个字符串。您的语言实现此功能的方式会有所不同。