与任何元素的.innerHTML属性匹配的JavaScript正则表达式

时间:2016-04-25 14:17:02

标签: javascript regex google-chrome-extension

我目前正在制作Chrome扩展程序,必须在网站中找到特定页面,特别是登录/登录页面,注册/注册页面, 关于页面和与我们联系页面。

我试图通过首先获取页面中的元素列表(我已经完成)来实现这一点。现在我需要检查元素的innerHTML,使其成为DOM中的叶节点并包含关键字的一部分,并且我正在尝试使用正则表达式执行此操作。我设法构建了一个正则表达式,它成功地返回元素的开始或结束标记之间的内容(即标记名称及其属性),但不是innerHTML。以下是我到目前为止所做的工作(以关于页面的示例:

var list = document.body.getElementsByTagName("*");
var aboutElement = /^[^<.+>].*About.*[^(<.+>]$/i;

for (var i = 0; i <= list.length; i++) {
    if ((aboutElement.test(list[i].innerHTML)) || (aboutElement.test(list[i].alt))) {
        list[i].click();
    }
}

知道我应该添加什么,以便它只匹配叶节点(不包含其他节点的节点)而不是开始或结束标记中的内容?我也认为,由于。* 部分,我已经完成了它将匹配innerHTML中的所有内容,因此我可能还需要更改它。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

感谢评论中的两个答案,我设法解决了问题。我使用了.textContent并更改了正则表达式,如下所示,并且有效。

var list = document.body.getElementsByTagName("*");
var aboutElement = /^(.*?\s*(\bAbout\b)[^$]*)$/i;

for (var i = 0; i <= list.length; i++) {
    if ((aboutElement.test(list[i].textContent)) || (aboutElement.test(list[i].alt))) {
        list[i].click();
    }
}