我之前在SO上看过这个问题,但它是特定于标签或属性的
我需要将任何属性值与正则表达式匹配。我有以下内容,它匹配属性和值:
(\S+)=["']?((?:.(?!["']?\\s+(?:\S+)=|[>"']))+.)["']?
但是,我只希望它匹配值和值的引号。它还需要考虑单引号和双引号。
我理解避免使用HTML和使用解析器的建议,但这是一个特定的需要情况。我只是用它来对属性值进行颜色编码。
任何帮助?
答案 0 :(得分:3)
我对你的正则表达式字符串做了一个微调。
我将(\S+)=
替换为(?<==)
。
我认为你的正则表达式实现应该能够做一个积极的观察。
当使用嵌套在其内部的引号/双引号时,此正则表达式将显示不一致:<a onclick='StackExchange.switchMobile("on")'>mobile</a>
您可能需要考虑更改角色类以解决这个问题。
以下是完整的正则表达式字符串:
(?<==)["']?((?:.(?!["']?\\s+(?:\S+)=|[>"']))+.)["']?
根据我们的在线聊天讨论,我想出了一个更短更清洁的新正则表达式:
(?<==)('|").*?\1(?=.*?>)
这个正则表达式的作用如下:
=
符号 - (?<==)
('|")
.*?\1
>
- (?=.*?>)