我需要一个正则表达式模式来匹配遵循以下结构的驼峰式BEM类:BlockName_elementName-modifierName
我创建了这个正则表达式来完成这项工作:([A-Z][a-z0-9]+)+(\_[a-z0-9]+[A-Z0-9]?[a-z0-9]*)?(\-[a-z0-9]+[A-Z0-9]?[a-z0-9]*)?
应匹配的字符串示例:
Block
BlockName
BlockNameLonger
BlockName93
BlockName_element
BlockName_elementName
BlockName_elementNameLonger
BlockName_4elementName
BlockName_elementName-modifier
BlockName_elementName-modifierName
BlockName_elementName-modifierNameLonger
BlockName_elementName-modifier567Name
当前,它匹配除“较长”字符串以外的所有字符串。我不知道如何正确分组以匹配任何长度的骆驼案组。有人可以帮忙吗?
在此处查看演示:http://regexr.com/3h0sf
最佳答案
原始:([A-Z][a-z0-9]+)+(\_[a-z0-9]+[A-Z0-9]?[a-z0-9]*)?(\-[a-z0-9]+[A-Z0-9]?[a-z0-9]*)?
分成几组以了解各自的匹配项:([A-Z][a-z0-9]+)+
每组至少1个大写字母和至少1个小写字母/数字(\_[a-z0-9]+[A-Z0-9]?[a-z0-9]*)?
(可选)下划线,后跟一定数量的小数/数字,然后可选地一个大数,然后是任意数量的小数/数字(\-[a-z0-9]+[A-Z0-9]?[a-z0-9]*)?
与上面相同,除了以短划线开头。
在一组小写字母之后,我们需要将2nd和3rd更改为类似于1st的行为,因此我们只需要将其拼接为小写即可:(\_[a-z0-9]+([A-Z][a-z0-9]+)*)?
(将+更改为*,因为可能没有任何大写字母组)(\-[a-z0-9]+([A-Z][a-z0-9]+)*)?
全部一起:
([A-Z][a-z0-9]+)+(\_[a-z0-9]+([A-Z][a-z0-9]+)*)?(\-[a-z0-9]+([A-Z][a-z0-9]+)*)?
关于css - Camel 案例BEM的正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46862122/