首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >寻找帮助来构造模式匹配的Regex

寻找帮助来构造模式匹配的Regex
EN

Stack Overflow用户
提问于 2021-06-10 15:15:12
回答 1查看 57关注 0票数 0

我正在寻找帮助,在制定一个正则表达式匹配,而不是匹配一系列的名称模式,如果有人可以帮助。

以下是我想匹配/不匹配的案例列表:

代码语言:javascript
复制
// 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:

代码语言:javascript
复制
^(c-|_)([a-z]+)(__|--|-)?([a-z]+)(-{0,2}[a-z]+)+(-?(([a-z]-?)+|(like))$)

这几乎是可行的,但我仍然有一个匹配的案件,不应该匹配,我担心,我正在努力寻找如何分类的最后一个案例。

(这里有一个带有单元测试和匹配用例的regex101链接:https://regex101.com/r/HNAUpd/1/)

编辑:我忘了提到“喜欢”这个词,它是我的模式中的一个关键字,只能在字符串的末尾找到,不能成为字符串中唯一的单词。

编辑2:关于匹配的规则,它们如下:

  • 字符串只能以"_“、"c-”或"js-“开头。
  • 下面的单词可以是任何东西,但不应该是“喜欢”这个词,也不应该是字母在and范围内的其他任何东西,而且只能是小写字母。
  • 单词"like“只能是字符串中的最后一个,不能是字符串中的唯一一个。
  • 单词可以用"--“或"__”分隔。
  • 如果字符串以"c-“开头,那么除了前面的分隔符外,单词还可以用"-”分隔。

所有这些都是用于linter的CSS类/id匹配器。

如果有人能帮我做这件事,那就太棒了:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-10 15:46:00

我想你是在找这样的东西:

代码语言:javascript
复制
^(?!.*[\-_]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次或多次。
  • $ -字符串的末端。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67924009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档