我如何 select 基于标记和 html 中的 class 内容的正则表达式文本?

How do i select text with regex based on tag and class content in html?

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

示例:

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

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

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

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

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

我确定正确的形式在 class 属性中,但我无法编写此正则表达式。感谢您的帮助。

示例:

不嵌套比较合适,会造成代码混乱

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

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

Regex demo

备注

  • [^ 表示否定字符 class 匹配除列出的任何字符
  • (\w+) 捕获第 1 组中的 1+ 个单词字符,</code> 是反向引用以匹配与第 1 组相同的内容 </li> <li>该模式假设 <code>ANYTHING 部分没有字符 <>
  • md 在单词边界之间匹配,防止与另一个“单词”部分匹配

» 深思熟虑,阅读 tony the pony