正则表达式在HTML标记中找到CSS类

时间:2019-03-26 22:07:33

标签: regex

我正在寻找一个正则表达式,以查找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。

2 个答案:

答案 0 :(得分:1)

尝试以下正则表达式

(class \ s?= \ s?)\“([[\ d \ w \ s-] )(\ brow \ b)([\ d \ w \ s] )\“

测试了您提到的所有情况

https://regex101.com

答案 1 :(得分:1)

您必须确定边界,但是\b不够,因为它与-ra-row之间的位置相匹配,这是预期的,但并非预期的。要定义此边界以仅在类属性"之前或之后允许空格或位置,您将需要编写一个带有两个分支的模式:

class="(?:row|[^"]* row)(?![^" ])[^"]*"

以上内容可以简化为(但不是首选):

class="(?:[^"]* )?row(?![^" ])[^"]*"

更短一些,但与更长的一个相同(就表现而言):

class="(?:[^"]* )??row(?: [^"]*)?"

正则表达式细目:

  • class="从字面上匹配class="
  • (?:非捕获组的开始
    • row匹配row
    • |
    • [^"]* row匹配row,后接空格字符
  • )捕获组结束
  • (?![^" ])下一个立即数应为空格或"
  • [^"]*"最多可匹配"

请参见live demo here