javascript - 如何使用正则表达式检查字符串是否包含日期?

标签 javascript node.js split fs

我的文件中的日志位于多行中,每个记录的事件都有日期,我正在尝试编写逻辑 如果行以日期开头并且 如果第二行没有 将日期与第一行合并,这就是最终目标,下面的代码作为第一步打印有日期和没有日期的行,但它总是打印 否则声明, 知道执行错误是什么吗?

我的问题不是关于日期对象的验证,我只是想检查字符串是否包含日期,任何格式打印这些行。问题是我想使用日期参数组合多行和事件。

ctrl.js

fs.readFile(dir + '/' + logFile, 'utf8', function(err, data) {
    var line = data.split('\n');
    var messageDateInfo = line.split('|')[0].replace(/[\[\]']+/g, '');
    var d = parseDate(messageDateInfo);

    function parseDate(str) {
        var m = str.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/);
        return (m) ? new Date(m[3], m[2] - 1, m[1]) : null;
    }
    if (line.includes(d)) {
        console.log('print lines with date', line);
    } else {
        console.log('print lines without date', line);
    }
});

文件数据

[2017-03-23T18:13:16Z]|verbose|bmid: n/a|infra.topicWorkers|topology changed, emitting topology event { newTopology: 
   [ '-0000001337',
     '-0000001338',
     '-0000001339',
     '-0000001340',
     '-0000001341',
     '-0000001342' ],
  oldTopology: 
   [ '-0000001337',
     '-0000001338',
     '-0000001339',
     '-0000001340',
     '-0000001341' ],
  workerId: 6,
  pid: 30488 }
[2017-03-23T18:13:16Z]|verbose|bmid: n/a|infra.topicWorkers|topology changed, emitting topology event { newTopology: 
   [ '-0000001337',
     '-0000001338',
     '-0000001339',
     '-0000001340',
     '-0000001341',
     '-0000001342' ],
  oldTopology: [],
  workerId: 4,

最佳答案

您正在使用:

str.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/);

此处 str = [2017-03-23T18:13:16Z] 带有方括号 [],

虽然str采用ISO日期格式,并且您将其与永远不会匹配的“dd/MM/yyyy”正则表达式进行匹配

尝试使用这个正则表达式/^(\d{4})\D?(0[1-9]|1[0-2])\D?([12]\d|0[1 -9]|3[01])(\D?([01]\d|2[0-3])\D?([0-5]\d)\D?([0-5]\d )?\D?(\d{3})?)?$/

new Date(m[3], m[2] - 1, m[1]) 您仅返回日、月和年。

同时,将其与具有日期和时间的line进行比较,即18:13:16Z

您需要从数组中传递它们。

关于javascript - 如何使用正则表达式检查字符串是否包含日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43145058/

相关文章:

javascript - 功能设置不正确

node.js - webpack 仅捆绑 firebase/database 而不是 firebase/auth

node.js - 排序时流式传输大数据

javascript - 使用 dnode 从服务器向客户端发送消息

python - 分割字典的键 (12-13-14) 并找到最小的数字

python - 将大数据帧拆分为多个数据帧

javascript - JS - 从 AJAX 输出设置多维数组

javascript - faker.helpers.unique(faker.datatype.number, options) 不尊重提交的选项

javascript - div 左侧不需要的滚动条?

javascript - 如何将对象的子属性与 Polymer 中的纸张输入绑定(bind)