You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写灵活正则表达式从CSS文件提取所有类名?

解决CSS类名提取的正则表达式方案

针对你提到的CSS文件格式混乱、链式类名匹配失败、简单类名无法识别的问题,这里提供一个符合需求的正则表达式:

(?<=}|^|\n|[\s,:{])\.([A-Za-z][A-Za-z0-9_-]*)(?=[\s,:{]|$|\n)

正则规则拆解

  • 前置断言 (?<=}|^|\n|[\s,:{]):确保类名的.前缀前是合法的分隔场景,包括上一个选择器的闭合大括号}、字符串开头、换行、空白符、逗号、冒号或左大括号,避免误匹配CSS属性中的点(比如url(./img.jpg))。
  • 类名匹配 \.([A-Za-z][A-Za-z0-9_-]*):
    • \. 匹配类名的.前缀
    • 捕获组([A-Za-z][A-Za-z0-9_-]*)匹配合法CSS类名:首字符必须是大小写字母,后续可跟字母、数字、-或_,覆盖纯字母类名(如.glyphicon)、带连字符/下划线的类名,以及链式类名中的每个单独类。
  • 后置断言 (?=[\s,:{]|$|\n):确保类名结束于合法位置,包括空白符、逗号、冒号、左大括号、字符串结尾或换行,适配无空格的单行压缩CSS。

实际使用示例

JavaScript 环境

const cssContent = `
.glyphicon { font-size: 16px; }
.Interesting-Complex.Class-Name2.Specialty_Class { margin: 0; }
.single-class, .another_class { padding: 8px; }
`;
const classRegex = /(?<=}|^|\n|[\s,:{])\.([A-Za-z][A-Za-z0-9_-]*)(?=[\s,:{]|$|\n)/g;
const extractedClasses = [...cssContent.matchAll(classRegex)].map(match => match[1]);
console.log(extractedClasses);
// 输出: ["glyphicon", "Interesting-Complex", "Class-Name2", "Specialty_Class", "single-class", "another_class"]

Python 环境

import re

css_content = """
.glyphicon { font-size: 16px; }
.Interesting-Complex.Class-Name2.Specialty_Class { margin: 0; }
.single-class, .another_class { padding: 8px; }
"""
class_pattern = r'(?<=}|^|\n|[\s,:{])\.([A-Za-z][A-Za-z0-9_-]*)(?=[\s,:{]|$|\n)'
extracted_classes = re.findall(class_pattern, css_content)
print(extracted_classes)
# 输出: ['glyphicon', 'Interesting-Complex', 'Class-Name2', 'Specialty_Class', 'single-class', 'another_class']

注意事项

  • 该正则会自动忽略CSS伪类/伪元素前缀(比如.class:hover中的hover),只提取核心类名class,符合你提取可用类名的需求。
  • 若需要支持不符合CSS规范的类名(比如以数字开头的.3invalid),可将捕获组修改为[A-Za-z0-9_-]+,但不推荐使用这类不规范类名。
  • 对于包含嵌套语法的预处理器(Sass/Less),该正则同样能正确提取各级类名。

内容的提问来源于stack exchange,提问作者Jamie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 17:55:58