如何扩展Stylelint的kebab-case正则以支持双下划线分隔符?
解决Stylelint CSS类名正则支持双下划线分隔的问题
原Stylelint默认的类名校验正则仅支持kebab-case命名:
^([a-z][a-z0-9]*)(-[a-z0-9]+)*$
你之前尝试的正则^([a-z][a-z0-9]*)(__)?(-[a-z0-9]+)*$无法生效,是因为它只允许在类名开头的第一个片段后添加一次可选双下划线,无法匹配像v-list-item__prepend这种先经过多次短横线分隔、再用双下划线分隔的结构。
正确的正则写法
如果你需要同时支持短横线(-)和双下划线(__)作为分隔符,且两种分隔符可以混合使用,推荐使用:
^[a-z][a-z0-9]*(?:(?:-|__)[a-z0-9]+)*$
正则说明
^[a-z][a-z0-9]*:强制类名以小写字母开头,后续可跟任意数量的小写字母或数字(?:(?:-|__)[a-z0-9]+)*:允许类名后续出现任意数量的分隔片段,每个片段以-或__开头,后面跟小写字母或数字((?:...)为非捕获组,仅用于分组匹配,不保存匹配结果)
验证匹配
这个正则可以正确匹配你列出的所有有效类名:
foo-barv-list-item__prependv-list-item__spacer
同时也支持其他混合分隔的合法命名(如foo__bar、foo-bar__baz-qux等)。
内容的提问来源于stack exchange,提问作者Dónal
相关产品推荐
相关产品推荐

