我使用正则表达式从CSS文件中提取所有类名。如果只有一个类,例如.test {margin: 0}
,正则表达式工作得很好,但如果有一组类,例如.test.second.third {margin:0}
,我只需要第一个类的结果:.test
。
我当前的正则表达式给我.test, .second, .third
。这很好,但这不是我需要的。正则表达式中的错误在哪里?
我在JavaScript中使用它:
code = code.match(/(?:[.]{1})([a-zA-Z_]+[w-_]*)(?:[s.,{>#:]{0})/igm);
或在这里作为regex101表:https://regex101.com/r/sgjrHt/1
在你的模式中:
(?:[.]{1})
部分与.
相同- 使用
w
也匹配_
,所以你不必把它们都添加到这样的字符类[w-_]
- 请注意,在该格式中,您必须转义连字符或将其放在字符类 的开头或结尾。
如果支持向后看断言:
(?<!S).w+(?:[:-]+w+)*(?=[^{}]*{[^{}]*})
(?<!S)
在左侧断言一个空白边界.w+
匹配.
和1+字字符(?:[:-]+w+)*
可选重复匹配:
或-
和1+字字符(?=
正向前看,向右断言[^{}]*
匹配{
和}
以外的可选字符{[^{}]*}
匹配{...}
)
关闭forward
Regex演示
如果没有后台,可以使用捕获组:
(?:s|^)(.w+(?:[:-]+w+)*)[^{}]*{[^{}]*}
Regex演示