如何根据 html 中的标签和类内容使用正则表达式选择文本? [关闭]

Posted

技术标签:

【中文标题】如何根据 html 中的标签和类内容使用正则表达式选择文本? [关闭]【英文标题】:How do i select text with regex based on tag and class content in html? [closed] 【发布时间】:2021-08-17 09:18:42 【问题描述】:

我有一个 html 标签作为字符串。如果这个标签的class属性中包含'md',我想选择它并获取标签中的表达式。

例子:

'<tag class="...blah md blah...">(expression)</tag>

<tag></tag> 是第一个选择器 包含的类属性 md 是第二个选择器 同时标签不能为空。

我的意思是,我需要一个以<tag> 开头并以</tag> 结尾并在类属性 中给出带有md 的标签的正则表达式,但我无法摆脱它。

我所做的是尝试选择具有直接 md 属性的那些,但这是错误的。嵌套标签也有问题。

(<b md(?!<|>).+>|<b \S+ md>|<b md>|<b .+ md .+>)(.+)(<\/b>)

https://regex101.com/r/3Vv0WG/1

我认为正确的形式在类属性中,但我无法编写这个正则表达式。感谢您的帮助。

例子:

'&lt;b class="... md ..."&gt;&lt;/b&gt;' 不匹配,因为标签为空 '&lt;i class="..."&gt;&lt;/i&gt;' 不匹配,因为类属性不包含 md &lt;span class="...md..."&gt;ANYTHING&lt;/span&gt;匹配

不嵌套会更合适,因为它会导致代码混乱。

【问题讨论】:

为什么不使用带有classList.contains()或domparser的dom和javascript 这是一个替换循环,我有一个字符串,而不是一个 html 元素,我需要替换符合这个条件的文本,所以我必须用正则表达式检查类,因为它不是dom 元素,我还需要检查它的标签。 可以有嵌套元素吗? @RıdvanOnal 第四只鸟可能会问,因为它完全不同,如果可能出现嵌套标签,例如&lt;b&gt;abc&lt;b&gt;de&lt;/b&gt;&lt;/b&gt;。也许您可以稍微澄清一下您的问题,包括场景、输入、预期结果、您使用的工具...... 完全正确 :-) 您可以使用 regex101.com/r/Girb1Y/1 侥幸逃脱,但这很容易中断,使用 DOMParser 读取字符串可能仍然是更好的选择。 【参考方案1】:

如果您没有可用的解析器或 dom,并且只能从带有模式的字符串中获取部分,您可能会逃脱:

<(\w+) [^<>]*\bclass\s*=\s*"[^"]*\bmd\b[^"]*"[^<>]*>[^<>]+<\/\1>

Regex demo

注意事项

[^ 表示一个否定字符类,匹配除所列字符以外的任何字符 (\w+) 捕获第 1 组中的 1+ 个单词字符,\1 是与第 1 组相同的反向引用 该模式假定ANYTHING 部分没有字符&lt;&gt; md 在单词边界之间匹配,防止与另一个“单词”部分匹配

» 深思熟虑,阅读tony the pony。

【讨论】:

以上是关于如何根据 html 中的标签和类内容使用正则表达式选择文本? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

IOS使用正则表达式去掉html中的标签元素,获得纯文本

如何使用javascript中的正则表达式在html标记中获取内容,包括标记?

如何使用正则表达式获取 `<body>` 标签内的全部内容?

织梦数据库内容替换,正则去掉文章内容中的img标签

求一条c# 正则表达式,来获取HTML标签的内容

正则表达式:从“内容”中排除 html 标签