我需要一个正则表达式模式来匹配遵循以下结构的驼峰式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/

10-14 19:42
查看更多