regex 扩展kebab-case正则表达式以允许双下划线分隔符

cyvaqqii  于 7个月前  发布在  其他
关注(0)|答案(3)|浏览(175)

Stylelint用来检查CSS类名的默认正则表达式是

^([a-z][a-z0-9]*)(-[a-z0-9]+)*$

字符串
这允许kebab大小写的名称,如foo-bar。我想将其更改为允许在名称中使用双下划线作为分隔符,例如,以下所有内容都应被视为有效

  • foo-bar
  • v-list-item__prepend
  • v-list-item__spacer

换句话说,双下划线分隔符是 * 允许的 *,但不是 * 必需的 *。

^([a-z][a-z0-9]*)(__)?(-[a-z0-9]+)*$

h6my8fg2

h6my8fg21#

你的正则表达式的问题是它只允许在初始单词后有一个可选的双下划线。在那之后,只允许kebab-case模式。
这可以工作:^([a-z][a-z0-9]*)(__[a-z0-9]+|-{1}[a-z0-9]+)*$

vx6bjr1n

vx6bjr1n2#

只需将-替换为(-|__)

^([a-z][a-z0-9]*)((-|__)[a-z0-9]+)*$

字符串
这将允许v-list-item__prepend-foo

mwecs4sa

mwecs4sa3#

你可以尝试下面的正则表达式来允许BEM类型类名:

^([a-z][a-z0-9]*)(-[a-z0-9]+)*(__[a-z0-9]+(-[a-z0-9]+)*)?$

字符串

上述正则表达式的解释:
*^-行首
*([a-z][a-z0-9]*)-第一个捕获组匹配重复字母和数字0次或更多次。
*(-[a-z0-9]+)*-第二个捕获组,至少匹配1个字母或数字,后跟-。该组也可以存在0次或多次。
*(__[a-z0-9]+(-[a-z0-9]+)*)?-第三个和第四个捕获组(必需的一个),支持__,后面至少有一个字母或数字,然后是第二个捕获组的定义,该组也存在0或1次。
*$-行结束。

x1c 0d1x的数据

相关问题