我正在寻找一个正则表达式,以查找HTML标记中CSS类名称的所有实例。到目前为止,我假设row
是我要查找的类名:
class=\"[a-zA-Z0-9\-_\s]*row[a-zA-Z0-9\-_\s]*\"
它与以下所有内容正确匹配:
class="foo_bar bar row test"
class="row"
class="hello foo bar row"
class=" foo bar row test "
正确地与此不匹配:
class="hello" row
不幸的是,它与以下这些错误匹配(误报):
class="narrow"
class="rowdy"
哪些正则表达式可以在HTML中找到特定的CSS类名称?
更新 关于如何使用正则表达式解析DOM有很多评论。我的用例是在包含数千个HTML文件的大型项目中进行“查找全部”,以查找特定CSS类的使用位置。我没有在浏览器内部操作或无法访问DOM。
答案 0 :(得分:1)
尝试以下正则表达式
(class \ s?= \ s?)\“([[\ d \ w \ s-] )(\ brow \ b)([\ d \ w \ s] )\“
测试了您提到的所有情况
答案 1 :(得分:1)
您必须确定边界,但是\b
不够,因为它与-
中r
和a-row
之间的位置相匹配,这是预期的,但并非预期的。要定义此边界以仅在类属性"
之前或之后允许空格或位置,您将需要编写一个带有两个分支的模式:
class="(?:row|[^"]* row)(?![^" ])[^"]*"
以上内容可以简化为(但不是首选):
class="(?:[^"]* )?row(?![^" ])[^"]*"
更短一些,但与更长的一个相同(就表现而言):
class="(?:[^"]* )??row(?: [^"]*)?"
正则表达式细目:
class="
从字面上匹配class="
(?:
非捕获组的开始
row
匹配row
|
或[^"]* row
匹配row
,后接空格字符)
捕获组结束(?![^" ])
下一个立即数应为空格或"
[^"]*"
最多可匹配"