我的文件中的日志位于多行中,每个记录的事件都有日期,我正在尝试编写逻辑 如果行以日期开头并且 如果第二行没有 将日期与第一行合并,这就是最终目标,下面的代码作为第一步打印有日期和没有日期的行,但它总是打印 否则声明, 知道执行错误是什么吗?
我的问题不是关于日期对象的验证,我只是想检查字符串是否包含日期,任何格式打印这些行。问题是我想使用日期参数组合多行和事件。
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/