代码之家  ›  专栏  ›  技术社区  ›  Johnny Oshika

在HTML标记中查找CSS类的regex

  •  0
  • Johnny Oshika  · 技术社区  · 7 年前

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

    什么regex可以在html中找到特定的css类名?

    更新 有很多关于我不应该如何用regex解析DOM的评论。我的用例是在一个包含数千个HTML文件的大型项目中执行“全部查找”,以查找使用特定CSS类的位置。我没有在浏览器内部操作,也没有访问DOM的权限。

    0 回复  |  直到 7 年前
        1
  •  1
  •   revo shanwije    7 年前

    你必须划清界限,但是 \b 还不够,因为它与 - 和 r 在里面 a-row 这是预期的,但不是预期的。定义此边界以仅允许空格或位置在后面或之前 " 对于类属性,您需要编写一个具有两个分支的模式:

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

    上述内容可缩短至(但不可取):

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

    较短,但与较长的相同(从性能角度讲):

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

    Regex分解:

    • class=" 比赛 类= 字面
    • (?: 非捕获组的开始
      • row 比赛 行
      • | 或
      • [^"]* row 比赛 行 以空格字符开头
    • ) 捕获组结束
    • (?![^" ]) 下一个直接字符应该是空格或 “
    • [^"]*" 匹配并包括 “

    见 live demo here

        2
  •  1
  •   Jobelle    7 年前

    尝试下面的regex

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

    测试了你提到的所有案例

    https://regex101.com