用正则表达式提取背景颜色

时间:2014-01-21 08:40:11

标签: javascript regex

假设我们在元素上设置背景如下:

  1. background:green
  2. background:url(“big_green.png”)
  3. background:green url(“big_green”)no-repat
  4. background:url(“big_green”)green no-repeat
  5. 我想要的是提取背景颜色值,而不是url()中的值。

2 个答案:

答案 0 :(得分:2)

您可以使用:

 (?:background:\s")(.+)(?:")

Demo

说明: (?:background:\s")非捕获组

background:匹配字符背景:字面意思(区分大小写)

\s匹配任何空格字符[\r\n\t\f ]

"字面匹配字符"

第一个捕获小组(.+)

.+匹配任何字符(换行符除外)

量词:在一次和无限次之间,尽可能多次,根据需要回馈[贪心]

(?:")非捕获组

"字面匹配字符"

enter image description here

答案 1 :(得分:1)

我去了

background:\s"(.+)"

这样您可以假设\s之后只有空格(")和background。如果在url之后background出现并且您不需要任何前瞻,那么它就不会匹配。

Demo @ regex101

修改
根据你的第三和第四个例子,上面的正则表达式显然不会起作用。

background:\s(?:"(.+)"|(?!url)(\w+)|url\(.+\) (.+?)\s)

这个将匹配您的所有示例案例。

Demo @ regex101

说明:

background:\s  #matches "background: " literally
(?:            #start of non-capturing group
      "(.+)"   #matches characters enclodes by "" (Example 1)
    |          #OR
      (?!url)  #negative lookahead: if "url" comes afterwards, this isn't a match
      (\w+)    #matches mupltiple characters (Example 3)
    |          #OR
      url\(    #matches "url(" literally
      .+       #matches multiple characters
      \)       #matches ") " literally
      (.+?)\s  #matches multiple characters until the next whitespace (Example 4)
)              #end of non-capturing group