正则表达式匹配线性渐变

时间:2012-08-12 13:18:05

标签: css regex

是否可以使用唯一的正则表达式正确分割background-image线性渐变定义,即:

linear-gradient(hsl(200, 83%, 64%), hsl(200, 81%, 59%) 32%, rgb(22, 22, 22) 81%, red)

我正在寻找的是获得这样的多个比赛(在这种情况下是4场比赛):

$1:hsl(200, 83%, 64%)
$2:
$1:hsl(200, 81%, 59%)
$2:32%
$1:rgb(22, 22, 22)
$2:81%
$1:red
$2:

我正在尝试类似的事情:

(hsl\([^\)]*\))\s*(\d+%)?

但这只适用于hsl,必须有一些聪明的方法来减少具体的

1 个答案:

答案 0 :(得分:1)

CSS中引用了许多颜色格式。包括

  • ‹Name›(例如“红色”)
  • #rgb
  • #RRGGBB
  • rgb(r, g, b)(每个号码0-255)
  • rgb(r%, g%, b%)
  • hsl(...)(如Q中所述)

然后hslargba添加Alpha通道。最后是currentColor关键字。

最简单的方法是为每个要支持的构建一个正则表达式,然后用交替(|)分隔。首先:

#[0-9a-fA-F]{3,6}|rgb ?\([ 0-9.%,]+?\)

应该涵盖十六进制和(两个)rgb形式。但它也会匹配无效的表达式(有效只会更复杂)。

最后,不要忘记linear-gradient

  • 可以从方向(例如“到底部”)或角度
  • 开始
  • 每种颜色都可以包含一个停止点(如果您不希望颜色均匀分布):百分比或距离
  • 还有repeating-linear-gradient