【发布时间】:2016-07-01 06:35:07
【问题描述】:
从box-shadow 计算值或样式规则中替换颜色字符串非常麻烦。在外面找到了一些东西,但我需要一些更短的东西。
// extract a hex color with a space before or after
// test string "1px 1px #555 inset" OR "1px 1px #555"
var color1 = "1px 1px #555 inset"; // OR "1px 1px #555"
var hex = color1.match(/(\s+\#+([a-f0-9]{6}|[a-f0-9]{3})|\#+([a-f0-9]{6}|[a-f0-9]{3})+\s)/ig);
// also extract a rgb/rgba with a space before or after
var color2 = "rgb(150,160,155) 1px 2px"; // OR "1px 2px rgb(150,160,155) inset"
var rgb = color2.match(/(rgb|rgba)+\([^)]+\)+\s|\s+(rgb|rgba)+\([^)]+\)/g);
如您所见,两者看起来都很长,但它们几乎可以正常工作。
更新:根据要求,我将添加更多关于我对这个正则表达式的期望的信息。这里是测试用例:
-
1px 1px #555- 从这个字符串中,我需要之前有空格的颜色,正是' #555' -
1px 1px #555 inset- 从这个字符串中,我需要前后有空格的颜色,正是如此' #555 ' -
1px 1px rgb(150,150, 150)- 从这个字符串中我需要之前有空格的颜色,就像' rgb(150,150, 150)' -
1px 1px rgb(150,150, 150) inset- 从这个字符串中,我需要前后有空格的颜色,正是如此' rgb(150,150, 150) ' -
rgb(150,150, 150) 1px 1px- 从这个字符串中,我需要后面有空格的颜色,正好是'rgb(150,150, 150) '
我希望这现在很清楚。那么有没有办法让它们更短以及检查上述所有内容?
【问题讨论】:
-
你确定你的第一个正则表达式吗?它与
######345fff111匹配,这对我来说有点奇怪 -
我认为我们实际上不会有那种十六进制值。不过,
\#{1}+会解决这个问题吗? -
如果你想要一个
#,那么#就足够了(比如#([a-f0-9]{6}|[a-f0-9]{3}) -
如果你只想在第一个示例中匹配 # 后跟 3 或 6 个十六进制字符
#(?:[a-f\d]{3}){1,2}\b应该足够了 -
你为什么要这样做?
标签: javascript regex hex rgb