我有一串包含大量动态内容的字符串,我需要从字符串中获取十六进制颜色。
<div class=''>2014-02-01</div>
<div class='' style='color: #0b62a4'>
Company 1:
$0
</div>
<div class='' style='color: #7A92A3'>
Company 2:
$4
</div>
我想在js中获取数组中的所有十六进制颜色。在js中,我如何使用正则表达式来获取&#34;#&#34;之间的所有十六进制颜色。和&#34;&#39;&#34;?先谢谢!
示例代码:
<script>
var colors = getStringBetween(content,"#","'");
</script>
答案 0 :(得分:2)
颜色十六进制代码可以是3位数或6位
您需要的RegEx是
/(#[0-9A-F]{6})|(#[0-9A-F]{3})/gi
以下是Demo
<强>代码强>
var getAllColors = function(content) {
return content.match(/(#[0-9A-F]{6})|(#[0-9A-F]{3})/gi)
}
var str = "<div class=''>2014-02-01</div><div class=''style='color: #0b62a4'>Company 1:$0</div><div class=''style='color: #7A92A3'>Company 2:$4</div><div class=''style='color: #7A3'>Company 2:$4</div>"
getAllColors(str)
//output ["#0b62a4", "#7A92A3", "#7A3"]
答案 1 :(得分:0)
您可以使用类似于以下
的正则表达式var rgbHex = /#([0-9A-F][0-9A-F])([0-9A-F][0-9A-F])([0-9A-F][0-9A-F])/gi
使用str.match
函数提取匹配列表
var colors = content.match(rgbHex);
答案 2 :(得分:0)
上面的答案非常好,但它不会越过多线,匹配函数将返回比你想要迭代的更多(括号集将在结果中显示)
尝试.match(/\#[0-9a-fA-F]+?\'/gm):
点击f12并以此为例运行
("<div class=''>2014-02-01</div>"+
"<div class='' style='color: #0b62a4'>"+
"Company 1:"+
"$0"+
"</div>"+
"<div class='' style='color: #7A92A3'>"+
"Company 2:"+
"$4"+
"</div> ").match(/\#[0-9a-fA-F]+?\'/gm)
答案 3 :(得分:0)
string=document.body.innerHTML;
matches=string.match(/#[0-9A-Za-z]{6}/g);
console.log(matches);
答案 4 :(得分:0)
这是一个非常简单的函数,它返回一个6位十六进制数字的数组,而不添加#字符。它还会自动扩展任何3位十六进制代码(例如:#abc = aabbcc)。
function getHex(str){
var rHex = /#[\da-f]+/ig;
var matches = str.match(rHex) || [];
var i = matches.length;
while(i--){
var match = matches[i].slice(1);
if(match.length == 3){
var expand = '';
expand += match[0] + match[0];
expand += match[1] + match[1];
expand += match[2] + match[2];
match = expand;
}
matches[i] = match;
}
return matches;
}