我有一些我想解析的简单文字:
total 4.0K
-rw-rw-r-- 1 346 Mar 1 08:50 save_1
-rw-rw-r-- 1 0 Feb 28 17:28 save_2
-rw-rw-r-- 1 0 Feb 28 17:28 save_3
我有一个正则表达式,我已经测试过在不同的正则表达式测试网站上工作:
\w{3}\s+\d{1,2}\s\d{2}\:\d{2}\s\w{4}\_\d
我正在尝试将示例文本作为Node.js应用程序中以下函数的输入,并返回一个具有3个不同匹配项的对象或数组,从月份到行尾。
function parse(str) {
var regex = new RegExp("\w{3}\s+\d{1,2}\s\d{2}\:\d{2}\s\w{4}\_\d");
return regex.test(str);
//return str.match(regex);
}
我不明白为什么.test()的布尔值为false,而.match()的对象为null。
非常感谢任何帮助。
答案 0 :(得分:3)
您应该只使用node.js提供的文件系统操作,而不是尝试解析ls
,which is bad的输出。使用文件系统操作,您可以确保您的程序(几乎)可以在任何边缘情况下工作,因为输出定义良好。如果文件夹将来包含的文件多于或少于3个,它甚至可以工作!
正如您在评论中所述,您需要文件夹中文件的名称和日期/时间。那么让我们来看看:
fs.readdir(path, callback)
:fs.readdir
会在路径中指定的文件夹中为您提供一组文件名。您可以将它们传递给fs.stat
以找出mtime:
fs.stat(path, callback)
:fs.stat()
将为您提供fs.Stats
的对象,其中包含mtime
属性中的mtime。
所以你的代码后面会看起来像这样:
fs.readdir('dir', function (err, files) {
for (var i = 0; i < files.length; i++) {
(function () {
var filename = files[i]
fs.stat('dir/' + filename, function (err, stats) {
console.log(filename + " was last changed on " + stats.mtime);
});
})();
}
});
输出结果为:
[timwolla@~/test]node test.js
5 was last changed on Fri Mar 01 2013 20:24:35 GMT+0100 (CET)
4 was last changed on Fri Mar 01 2013 20:24:34 GMT+0100 (CET)
2 was last changed on Fri Mar 01 2013 20:24:33 GMT+0100 (CET)
如果您需要返回值,请使用这些方法的相应Sync
- 版本。但是,这些将阻止你的node.js事件循环。
答案 1 :(得分:0)
您的正则表达式失败,因为在将字符串传递给RegExp构造函数时需要转义\
,即\s
应为\\s
。
var regex = new RegExp( "\\w{3}\\s+\\d{1,2}\\s\\d{2}:\\d{2}\\s\\w{4}_\\d", "g" );
添加g
标志以获取所有匹配项。