RegEx 只查看 HTML 标签内的文本?

Posted

技术标签:

【中文标题】RegEx 只查看 HTML 标签内的文本?【英文标题】:RegEx to only look at text inside HTML tags? 【发布时间】:2021-03-03 10:50:07 【问题描述】:

我最近开始学习/使用 RegEx。

有没有办法避免匹配属于 html 标签属性或属于标签属性的单词?

例如:

<p style=“position: absolute”>position: </p>

我试过了

/\bposition\b\W\s/g

但这两个实例都匹配。

只能匹配第二个“位置:”吗?

澄清:

我正在尝试在文档中搜索用户输入的单词并将其替换为包含这些单词的 span 元素 - 这类似于“Ctrl + F”。仅仅拥有文本是不够的,因为一旦将文本替换为 span 元素,我还需要一种方法来更新文档。

【问题讨论】:

现在您已经了解了 RegEx,现在该了解when not to use RegEx,以及何时使用 HTML 解析器,例如 HTML Agility 包。 不要。别。别。别。了解DOM Manipulation 以及如何获取段落DOM 元素 的文本内容,而不是尝试在页面源文本 上工作。 @Stephen P 问题是我知道如何相对较好地遍历 DOM,但是我的程序需要在任何页面上搜索单词,并且查询元素似乎对此不正确。我认为文档正文中的 RegEx 更有意义。将进一步研究它。 看第一个答案及以后 here 。这也可能是 XY 问题,你到底想做什么? OK 很酷,该页面上的 XPath 答案可能是一个很好的起点。自从我使用 XPath 以来已经有一段时间了,但我 99% 确定您可以获得节点列表而不是单个节点。拥有节点后,您就可以操作这些节点的内容。基本伪代码:Find me the nodes containing this text. For each node replace the searched text with &lt;span&gt;Text&lt;/span&gt; 【参考方案1】:

匹配 HTML / XML 标记的 RegEx 是 /(&lt;([^&gt;]+)&gt;)/ig。也许这就是你要找的。​​p>

let str = '<p style="position: absolute">position: </p>';
const strWithoutTag = str.replace(/(<([^>]+)>)/ig, '');
console.log(strWithoutTag);

【讨论】:

【参考方案2】:

免责声明:使用 document.innerText 和其他 DOM API 之类的东西,而不是 Regex。

匹配 HTML 标签:

&lt;.+?&gt;/g

匹配 HTML 标记中的所有内容(也应处理嵌套标记):

/(?&lt;=&lt;.+.&gt;)(.*?)(?=&lt;.*\/.+.?&gt;)/g

https://regex101.com/r/2uZHli/ 以上的例子。

【讨论】:

【参考方案3】:

您可以尝试使用正则表达式来匹配您的温度,它与第二个“位置:”匹配。

/(?=\b.*(?<yourKeyword>position).*\b)(?<=<[^]*>)([^<>]+)(?=<\/([^<>]*)>)/g

【讨论】:

以上是关于RegEx 只查看 HTML 标签内的文本?的主要内容,如果未能解决你的问题,请参考以下文章

如何用Python爬取出HTML指定标签内的文本?

如何在 QLabel 中查看未知的 HTML 标签?

我用UEditor编辑文本保存后,当我在查看详细页面时,发现文本域里面的字符还带了html标签,这是怎么一回

jQuery获取元素值以及设置元素值总结

修复 RegEx 以正确捕获括号内的文本

在python中使用正则表达式从文本中删除html标签