-1

我试图为用户输入构建一个正则表达式。我基于用户输入构建表单。让我们假设用户将 css 属性分配给“Icon-[anything]”(引导图标)。现在在这种情况下,我必须确保“--”不会重复多次,并且还应确保“icon-white”应该是唯一分配在另一个类旁边的类;这个“icon-white”也必须是可选的。

/^icon-[az-]+(\icon-white)?$/

- 此正则表达式适用于可选图标白色场景,但在避免重复“--”方面存在一些问题。

4

2 回答 2

1

如果你想匹配“icon-somevalue”而不是“icon-white”试试

icon-(?!white).*
于 2013-03-10T13:23:29.020 回答
1

如果我理解正确(虽然我不确定我是否理解,对不起......)我认为您是说允许以下两种情况:

  1. icon-white
  2. icon-[anything]where[anything]可以是任何小写文本并包含一个连字符,但绝不是两个(或更多)连字符直接相邻,例如--.

尽管您的原始正则表达式表明此模式将锚定在测试字符串的开头,但您尚未说明此模式可能出现的位置,因此我假设是这种情况。在这种情况下,这个正则表达式应该有帮助:

^icon-white$|^icon-([a-z]+-?)+$

打破它:

  1. ^icon-white$匹配包含完全“icon-white”的文字字符串
  2. |或者
  3. ^icon-([a-z]+-?)+$匹配以"icon-"开头并立即以"something" 结尾的文字字符串,即([a-z]+-?)+.

现在,要清楚 - 我不明白 and 之间的icon-white关系icon-[something]。也就是说,据我所知,上面 3 的模式也没有理由icon-[something]不能覆盖“icon-white”文字。即上面的1和2是多余的。但是我把它们包括在这里,这样你就可以把更合适的东西拼凑在一起。

将“某物”从 3 分解:

  1. ( )+表示括号内的任何内容的一个或多个实例,即[a-z]+-?

打破它[a-z]+-?

  1. [a-z]+至少一个字符“a”到“z”(注意此处不允许使用连字符以避免在前一个字符之后立即出现额外的连字符)
  2. -? 一个可选的连字符(即正好是 0 或 1 个连字符)

这匹配以下测试用例:

  1. 图标-白色
  2. 图标-x
  3. 图标-xx
  4. 图标-x-
  5. 图标-xx-
  6. 图标-xx
  7. 图标-xx-x
  8. 图标-xx-xx
  9. 图标-xxx-
  10. 图标-x-xx-xx-x-xxxxx- ...等等

这与以下测试用例不匹配:

  1. 任何使用大写字母的情况(您只指定了小写字母)
  2. icon- (因为我们需要一个或多个字符来表示“某物”。
  3. 图标 -
  4. 图标--x
  5. 图标-x--

我希望这能满足您的需求,但我怀疑它确实如此(因为我并不真正理解您的解释“确保“icon-white”应该是唯一分配在另一个类旁边的类”),但希望我的细分能给你您需要的部分。


编辑:

我想也许你说允许的场景是:

  1. 图标-[某物]
  2. 图标-[某物]图标-白色
  3. 图标-白色图标-[某物]

其中 [something] 是小写文本和连字符的任意组合,只要不存在双连字符,并且不是“白色”即可。

所以...这定义了 "icon-[something]" :icon-(?!white$)([a-z]+-?)+

这意味着我们的上述 3 个场景是:

  1. ^icon-(?!white$)([a-z]+-?)+$
  2. ^icon-(?!white$)([a-z]+-?)+ icon-white$
  3. ^icon-white icon-(?!white$)([a-z]+-?)+$

因此,将它们放在一起:

^icon-(?!white$)([a-z]+-?)+$|^icon-(?!white$)([a-z]+-?)+ icon-white$|^icon-white icon-(?!white$)([a-z]+-?)+$

我尝试将 icon-white 部分作为可选组来执行此操作,但在第一部分捕获它的负前瞻时遇到了麻烦......所以......这会做;-)

于 2013-03-11T15:18:41.350 回答