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

JavaScript regex that matches the .innerHTML attribute of any element

本文关键字:JavaScript 正则表达式 innerHTML 任何 元素 属性      更新时间:2023-09-26

>我目前正在构建一个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 中的所有内容相匹配,所以我可能也需要更改它。任何帮助将不胜感激!

感谢评论中的两个答案,我设法解决了这个问题。我使用了.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();
    }
}