【发布时间】:2017-02-19 16:42:47
【问题描述】:
我正在开发 node js 应用程序来单独从 XML 或 HTML 文件中提取一些内容。我正在使用Windows机器。一些 Npm 包只能在苹果或 Linux 机器上运行,我无法使用它。我试图从一个目录中单独获取特定文件,因为该目录包含多个文件。
例如,文件名为 project1.abi.xml、project1.xbi.xml、project2.abi.xml、project2.xbi.xml、new\xxcover.html。
首先,我希望单独获取 *.abi.xml 文件。其次,我希望单独获得 *.xbi.xml。第三,*cover.html。但是,我可以使用 readdirSync 获取目录中的所有文件。然后检查是否需要循环文件,然后执行我需要的功能。
var fs = require('fs');
var path = 'D:\\Work\\Testing\\logs\\';
var files = fs.readdirSync(path);
var len;
for (index = 0, len = files.length; index < len; index++) {
if (files[index].indexOf('xbi.xml') !== -1) {
console.log(path+files[index]);
}
}
为避免这种情况,有没有办法在循环之前从目录中获取特定类型的文件?有人可以指导我吗?
另外,我正在尝试使用节点 js 中的正则表达式从 html 文件中获取“总警告”计数 (216)。我得到的结果是未定义的。下面是我的代码。你能指出我在哪里犯了错误以纠正它吗?
HTML 内容
<body>
<h1>2017 report</h1>
<dl>
<dt>Source Directory:</dt>
<dd>F:\ion\ket\Automation\App</dd>
<dt>Settings File:</dt>
<dd>F:\ion\ket\Automation\App\Net.json, F:\ion\ket\Automation\App\Net.Debug.json</dd>
<dt>Processed Files:</dt>
<dd>30</dd>
<dt>Files with Warnings:</dt>
<dd>0</dd>
<dt>Total Warnings:</dt>
<dd>216</dd>
</dl>
代码:
var fs = require('fs');
var path = 'C:\\Users\\akil\\Desktop\\App.Net.html';
var files = fs.readFileSync(path, 'utf-8');
var re = new RegExp('/<dt>Total Warnings:</dt>\s+<dd>(?![\s\S]*</dd>)/');
var r = files.match(re);
if (r)
console.log(r[1]);
console.log(r);
谢谢。
【问题讨论】:
标签: javascript regex node.js xml