挑战是获取一个字符串值(在 JavaScript 中)并且:
a) 确定字符串值是否是有效的颜色表示(3 位十六进制、6 位十六进制或 rgb 值)
b) 检索有效的颜色值(例如 3 个十六进制数字、3 个十六进制对或 3 个 rgb 值)
c) 尽可能高效地执行此操作。
我有以下正则表达式,它们可以工作,但我需要使它们尽可能高效。
对于 RGB(r,g,b) 匹配,要确保 r,g & b 值是 0-255,并且只允许 r,g,b 匹配(例如输入是“255,255,255”或“255,255,255”或“RGB(255,255,255)”等)
re = /^rgb\(([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]),\s*([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]),\s*([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\)$|^([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]),\s*([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]),\s*([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$/;
对于 6 位十六进制值(例如“FFFFFF”):
re = /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/;
对于 3 位十六进制值(例如“FFF”):
re = /^([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])$/;
然后,对于其中的每一个,我使用:
result = re.exec(value);
if (result) {
// process using e.g. result[1], result[2] & result[3] as needed
}
这些是实现这一目标的最有效的正则表达式吗?还是有更好的方法,也许不使用正则表达式?
(致谢:这是解决 Stoyan 在http://www.phpied.com/rgb-color-parser-in-javascript的 RGB 颜色解析器代码中发现的无效匹配)