0

我试图弄清楚如何匹配一组特定的类 -

我只想匹配类inline 和/或一个(一组)colors,无论是单独还是两个:

 

<span class="inline">应该匹配

<span class="green">应该匹配

<span class="inline green">应该匹配

<span class="blue inline">应该匹配

 --

<span class="inline green blue">应该匹配(不超过 2 个类)

<span class="green blue">应该匹配(两种颜色 - 没有内联类)

 

我现在有这个,但它不起作用:

正则表达式/((inline)?(\s|green|blue|red|yellow))/

有什么建议么?非常感谢

4

1 回答 1

1

下面的正则表达式怎么样?

/^(?:inline|green|blue|red|yellow)(?:\s+(?:inline|green|blue|red|yellow))?$/

它分解如下:

  • ^: 类字符串的开始
  • (?:): 非捕获组。允许您将事物组合在一起而无需创建捕获组。这使事情变得更快。
  • inline|green|blue|red|yellow:所有可能值的枚举
  • \s+: 一个或多个空格字符。我认为,仅 \s 本身就有点限制。
  • (?:\s+(?:inline|green|blue|red|yellow))?:这使得第一个类名之后的所有内容都是可选的。

编辑

根据 nnnnnn 的评论,我认为我原来的正则表达式不适合这项工作。但是,我认为以下正则表达式应该没问题:

/^(?:inline(?:\s+(?:green|blue|red|yellow))?)|(?:green|blue|red|yellow(?:\s+inline)?)$/

显然,它要复杂得多,但这就是为什么最好简单地拆分元素的 className 字符串\s+,计算结果数组中元素的数量,然后单独检查每个元素。

于 2013-06-24T12:26:48.490 回答