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

How to check if string contains date using regular expression?

我有文件,我的日志在多行中每个记录的事件都有日期,我正在尝试编写逻辑
如果行以日期和开头
如果第二行不
将日期合并到第一行作为最终目标,在代码下面作为第一步打印行,其中日期与没有日期但始终打印
其他声明,
什么是错误的实施?

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

ctrl.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
fs.readFile(dir + '/' + logFile, 'utf8', function(err, data) {
    var line = data.split('
'
);
    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);
    }
});

FILEDATA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[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

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