【发布时间】:2017-02-10 05:58:08
【问题描述】:
* 我已经搜索了堆栈溢出并尝试了所有类似问题的答案 *
我正在编写一个节点脚本:
- 扫描目录以查找 html 文件
- 将文件内容读入字符串
- 在字符串中搜索 id 或类名
我正在使用正则表达式来查找 id 或类名。我在搜索 id 时可以获得匹配,但在搜索类名时不能。
这是我的示例代码:
为简单起见,我将html放入变量中,省略了文件读取部分。
var html = '<section class="mb-4" id="button-test">'+
'<button type="button" class="btn btn-primary">Primary</button>'+
'<button type="button" class="btn btn-secondary">Secondary</button>'+
'<button type="button" class="btn btn-success">Success</button>'+
'</section>';
var scan = function(content) {
var props = ['btn-primary', 'button-test'], res = {};
for (var i = 0; i < props.length; i++) {
var prop = props[i];
var exps = [
{key: '#', exp: new RegExp("<*.* id=([\"]|')\\s*"+prop+"\\s*([\"]|').*>", "gi")},
{key: 'data-comp=', exp: new RegExp("<*.* data-dna=([\"]|')\\s*"+prop+"\\s*([\"]|').*>", "gi")},
{key: '.', exp: new RegExp("<*.* class=([\"]|')*."+prop+".*([\"]|').*>", "gi")}
];
for (var e = 0; e < exps.length; e++) {
var item = exps[e];
var key = item.key;
var exp = item.exp;
var match = content.match(exp);
key += prop;
if (match) {
if (!res[key]) { res[key] = []; }
res[key].push(match[0]);
}
}
}
return res;
}
console.log(scan(html));
【问题讨论】:
-
关于该主题的解决方案都不适合我。
-
您能否添加一些关于到底是什么失败的细节?预期的输出应该是什么样的?它是什么样的?你的代码在什么时候失败了?`
(class|id)="(.*?)"呢? -
重新检查你的正则表达式,它们看起来很错误,部分太复杂了
-
如果您接受使用库,我建议您先使用解析器,例如 github.com/fb55/htmlparser2 。将 HTML 解析为树后,遍历树并找出所有类名是一个简单的问题。
标签: javascript regex node.js