如何根据 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
我认为正确的形式在类属性中,但我无法编写这个正则表达式。感谢您的帮助。
例子:
'<b class="... md ..."></b>'
不匹配,因为标签为空
'<i class="..."></i>'
不匹配,因为类属性不包含 md
<span class="...md...">ANYTHING</span>
匹配
不嵌套会更合适,因为它会导致代码混乱。
【问题讨论】:
为什么不使用带有classList.contains()
或domparser的dom和javascript?
这是一个替换循环,我有一个字符串,而不是一个 html 元素,我需要替换符合这个条件的文本,所以我必须用正则表达式检查类,因为它不是dom 元素,我还需要检查它的标签。
可以有嵌套元素吗?
@RıdvanOnal 第四只鸟可能会问,因为它完全不同,如果可能出现嵌套标签,例如<b>abc<b>de</b></b>
。也许您可以稍微澄清一下您的问题,包括场景、输入、预期结果、您使用的工具......
完全正确 :-) 您可以使用 regex101.com/r/Girb1Y/1 侥幸逃脱,但这很容易中断,使用 DOMParser 读取字符串可能仍然是更好的选择。
【参考方案1】:
如果您没有可用的解析器或 dom,并且只能从带有模式的字符串中获取部分,您可能会逃脱:
<(\w+) [^<>]*\bclass\s*=\s*"[^"]*\bmd\b[^"]*"[^<>]*>[^<>]+<\/\1>
Regex demo
注意事项
[^
表示一个否定字符类,匹配除所列字符以外的任何字符
(\w+)
捕获第 1 组中的 1+ 个单词字符,\1
是与第 1 组相同的反向引用
该模式假定ANYTHING
部分没有字符<
或>
md
在单词边界之间匹配,防止与另一个“单词”部分匹配
» 深思熟虑,阅读tony the pony。
【讨论】:
以上是关于如何根据 html 中的标签和类内容使用正则表达式选择文本? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用javascript中的正则表达式在html标记中获取内容,包括标记?