使用javascript匹配功能捕获十六进制颜色代码
Capture hexadec color code with javascript match function
我正在用javascript字符串捕获元素背景颜色的十六进制颜色代码。我使用这个脚本:
style = select.find(":selected").attr("style");
match = style.match(/background-color ?: ?(#[0-9a-f]{6})/i);
console.log(match);
上面的代码导致匹配数组有两个元素:
0: "background-color:#f"
1: "#f"
我不明白为什么我的正则表达式只捕获"#"和6个字符长的十六进制代码的第一个实际字符。我尝试添加'gglobal'修饰符,但结果仍然相同。我的正则表达式应该是什么样子?
以下是我想要的一个示例:从任何类型的内联css定义,比如:"border:1px solid #00ffff; background-color: #00ffaa; width: 500px ...etc
"匹配"background-color: #00ffaa
"部分并提取"#00ffaa
"部分。
试试这个正则表达式:
var string = "border:1px solid #00ffff; background-color: #00ffaa; width: 500px ...etc";
var answer = string.match(/background-color's*:'s*([^;]+)/);
console.log(answer);
document.write(answer[0] + '<br>' + answer[1]);
希望能有所帮助。
可能有更好的方法来实现您想要实现的目标——那就是什么?
我想你想找到某个元素的颜色,因为它意味着什么——比如,如果背景是蓝色,它是侧边栏,或者如果按钮的背景是灰色,它被禁用,或者在你的情况下,如果选择的选项是粉红色,那么它是一只狗。本质上,您将应用程序的部分状态存储在CSS属性中。但是,正如您所发现的,一旦您设置了CSS,重新将其取出可能并非易事。因此,最基本的解决方案是看看是否有办法在JS中管理应用程序的状态。
在您的情况下,您似乎想要在select
元素中获得所选选项的背景色,以便对其进行处理。请考虑为每个选项维护一组相关信息;或者在你容易得到的每个选项上加上一个数据属性;或者不需要在样式字符串内部到处翻找的其他方法。
其次,经验丰富的HTML/CSS人员几乎都同意,使用单独的样式属性不如使用类更可取。有了类,我只需设置类就可以在元素上设置一组属性;我可以用标准DOM或jQueryAPI轻松地查询、删除或替换类。
第三,人们也一致认为,使用regexp解析语言——即使是CSS这样简单的语言——也不是一个好主意。你总是会错过一些东西,然后你的正则表达式就会崩溃。例如,在您的原始regexp和其中一个答案中的一个中,除非冒号周围正好有零或一个空格,否则regexp将不起作用。一些可怜的灵魂——也许是你,也许是六个月后新来的人——将不得不追踪并修复当有人在冒号后面加两个空格时会出现的错误。
或者,您将假设背景颜色总是使用十六进制值设置的,并在此假设基础上构建代码。但后来新来的家伙来了,决定用hsl
指定一种颜色——代码会再次中断。
第四,如果这对您来说是一个问题,那么只有在该元素上显式设置了背景色属性时,"regexp on style string"方法才会起作用。例如,如果背景颜色来自CSS规则,那么这种方法就不会接受它。通常,这是人们建议使用getComputedStyle
或jQuery的.css()
的时候,这确实有效(尽管你仍然会得到rgb(r,g,b)
格式,如果你真的想用十六进制格式,你必须转换它)——但问题仍然存在,你为什么要在CSS中"存储"信息,以便再次返回?当然有这样的用例,但它们相对较少。
如果你确定你需要从特定元素的样式中检索背景颜色,并使用十六进制格式(为什么?),那么获取它并转换它:
backgroundColor = select.find(":selected").css('backgroundColor');
rgbColor = convertRGBToHex(style);
你可以在SO或其他地方找到很多convertRGBToHex
的方法。
尝试以下操作
var txt='border:1px solid #00ffff; background-color: #00ffaa;';
var match = txt.match(/background-color ?: ?(#{1}(?:[A-F0-9]){6})(?![0-9A-F])/i);
console.log(match);
document.write(match[1])
- 如何检查十六进制颜色是否为“”;太黑”;
- javascript:搜索并用不同的颜色代码替换十六进制颜色代码
- html5画布支持带alpha的十六进制颜色吗
- 以递增的渐变对十六进制颜色代码进行排序
- 如何将透明度信息添加到十六进制颜色代码
- 如何在 jquery 颜色选择器中设置数字十六进制颜色
- 有没有一行 javascript 可以将每个十六进制颜色更改为不同的十六进制颜色
- Regexp匹配十六进制颜色语法(和缩写形式)
- Javascript解析页面以查找十六进制颜色值
- 如何在Javascript中用十六进制颜色为字符串着色
- 使用javascript匹配功能捕获十六进制颜色代码
- 将随机字符串转换为十六进制颜色
- 将数组十六进制颜色转换为数组rgb颜色
- 将十六进制颜色传递到函数时,firefox中存在非法字符
- 在Javascript Regex中,如何验证字符串是否为有效的十六进制颜色
- 根据十六进制颜色获取最接近的颜色名称
- 生成一个随机的种子十六进制颜色
- 将照度转换为十六进制颜色
- 使十六进制颜色变亮或变暗
- 十六进制颜色码的按位补码总是返回6个字符吗?