我不明白为什么我的nodejs / JavaScript的正则expression式不工作
我有一些简单的文字,我试图parsing:
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
我有一个正则expression式,我已经testing了不同的正则expression式testing网站:
\w{3}\s+\d{1,2}\s\d{2}\:\d{2}\s\w{4}\_\d
我正在尝试将示例文本作为Node.js应用程序的以下函数中的input,并返回一个对象或数组,其中包含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。
任何帮助将不胜感激。
而不是试图parsingls
的输出, 这是不好的 ,你应该简单地使用node.js提供的文件系统操作。 使用文件系统操作,你可以确定你的程序将在(几乎)任何边界情况下工作,因为输出已被很好的定义。 它甚至可以在文件夹将来会包含比以前更多或更less的文件的情况下工作!
正如你在评论中所说的那样,你需要文件夹中文件的名字和date/时间。 所以让我们看看:
fs.readdir(path, callback)
: fs.readdir
会给你在path中指定的文件夹的一个文件名数组。 您可以将它们传递给fs.stat
以查找mtime:
fs.stat(path, callback)
: fs.stat()
会给你一个包含mtime
属性中的mtime
的fs.Stats
对象。
所以你的代码看起来像这样:
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事件循环。
你的正则expression式失败了,因为在向RegExp构造函数传递一个string时,你需要转义\
,即\s
应该是\\s
。
var regex = new RegExp( "\\w{3}\\s+\\d{1,2}\\s\\d{2}:\\d{2}\\s\\w{4}_\\d", "g" );
g
标志被添加来获得所有的匹配。