【问题标题】:Regex for camel case BEM骆驼案例 BEM 的正则表达式
【发布时间】:2017-10-21 10:02:23
【问题描述】:

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

【问题讨论】:

  • 您的正则表达式似乎对我有用。你能包括一些负面案例吗?

标签: css regex sass stylelint


【解决方案1】:

原文:([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个大写和至少1个小写/数字

  • (\_[a-z0-9]+[A-Z0-9]?[a-z0-9]*)? (可选)下划线后跟一些小写/数字,然后可选一个大写,然后是任意数量的小写/数字

  • (\-[a-z0-9]+[A-Z0-9]?[a-z0-9]*)? 与上述相同,但以破折号开头。

我们需要在一组小写之后将第 2 位和第 3 位更改为第 1 位,因此我们只需将其拼接到它们中即可:

  • (\_[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]+)*)?

【讨论】:

  • 我不知道这是否相关,但这将匹配BlockName-modifierNameLonger;如果这不是一个有效的结构,则可以对其进行更改以避免它。
  • 太棒了!当有人给你指路时,它总是那么明显。谢谢你。关于你的评论,因为这仍然遵循传统的 BEM 规则,是的,一个块可以跟一个修饰符,所以它也可以匹配它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-07
  • 2013-03-24
  • 2014-09-14
  • 2018-01-25
  • 1970-01-01
  • 2018-11-13
  • 1970-01-01
相关资源
最近更新 更多