我正在寻找帮助,在制定一个正则表达式匹配,而不是匹配一系列的名称模式,如果有人可以帮助。
以下是我想匹配/不匹配的案例列表:
// Should Match :
_class
c-class
_class-like
_class--variation
_class__children
_class__children--variation
c-custon-button-test
_class__lol--test
c-my-button-super-style
_class--variation-like
// Should not Match :
class
c--class
_class---variation
_class----variation
_class__test__test
_class--variation__children
_like
c-like
noMargin
no-Margin
_no-Margin
no-margin
_class-like__children
_class-like--variation现在我想出了这个regex:
^(c-|_)([a-z]+)(__|--|-)?([a-z]+)(-{0,2}[a-z]+)+(-?(([a-z]-?)+|(like))$)这几乎是可行的,但我仍然有一个匹配的案件,不应该匹配,我担心,我正在努力寻找如何分类的最后一个案例。
(这里有一个带有单元测试和匹配用例的regex101链接:https://regex101.com/r/HNAUpd/1/)
编辑:我忘了提到“喜欢”这个词,它是我的模式中的一个关键字,只能在字符串的末尾找到,不能成为字符串中唯一的单词。
编辑2:关于匹配的规则,它们如下:
所有这些都是用于linter的CSS类/id匹配器。
如果有人能帮我做这件事,那就太棒了:)
发布于 2021-06-10 15:46:00
我想你是在找这样的东西:
^(?!.*[\-_]like[\-_])(?:c-|js-|_)(?!like$)(?:[a-z]+(?:__|--?))?[a-z]+(?:--?[a-z]+)*$分解:
^ -字符串的开头。(?!.*[\-_]like[\-_]) -不包含两个分隔符之间的单词"like“(仅在字符串的末尾)。(?:c-|js-|_) -字符串开头的"c-“、"js-”或"_“。(?!like$) --不是紧随其后的是“喜欢”这个词。(?:[a-z]+(?:__|--?))? -(可选)一个或多个a-z字母在两个下划线或一个或两个连字符后面。[a-z]+ -一个或多个字母.(?:--?[a-z]+)* -匹配一个或两个连字符,后面跟着一个或多个a-z字母,并重复0次或多次。$ -字符串的末端。https://stackoverflow.com/questions/67924009
复制相似问题