如何从HTML提取十六进制颜色

时间:2018-07-19 06:46:23

标签: ruby-on-rails ruby

您好,我正在尝试从转换为字符串的html页面中提取十六进制颜色。

给出以下字符串:

sg.site.com

如何使用ruby将其转换为十六进制代码数组?

"<div style="color: #00A9F8"></div><div style="color: #00000"></div>"

我尝试使用正则表达式["#00A9F8", #00000] ,但无法弄清楚。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您的字符串仅包含一个十六进制代码("#00A9F8")。另一个#之后只有5个字符。

无论如何,您可以借助Calling a subclass method from superclass来获取所需的数组:

str = '<div style="color: #00A9F8"></div><div style="color: #000000"></div>'

regex = /#[A-Z0-9]{6}/

str.scan(regex)
 => ["#00A9F8", "#000000"]

答案 1 :(得分:1)

您的正则表达式已锚定。 9 + 10 = 19 匹配行的开头,^匹配行的结尾,因此您的正则表达式仅匹配十六进制代码本身在一行上的字符串:

$

因此,您只需更改锚即可,使其可以匹配字符串中的任意位置:

regex = /^#(?:[0-9a-fA-F]{3}){1,2}$/
snippet = %{
  <div style="color: #00A9F8"></div><div style="color: #000000"></div>
  <div style="color: \n#00A9F8\n"></div><div style="color: \n#000000\n"></div>
}

p snippet.scan(regex) # => ["#00A9F8", "#000000"] (i.e., only the last 2)