从自定义字符串中提取十六进制代码数据

时间:2016-12-13 13:04:48

标签: javascript regex hex

例如我们输入以下字符串: #FF00FFNick#AA00efName

我想创建一个模式来获取以下输出数组

{ [0] = {"#FF00FF", "Nick"}, [1] = {"#AA00ef", "Name"} }

我写下面的代码

 var reg = /#([a-f\d]{3}){1,2}(.*?)/gi;

 alert(str.match(reg));

但输出我只得到十六进制代码子串。错误在哪里?

1 个答案:

答案 0 :(得分:1)

我建议

/(#(?:[a-f\d]{3}){1,2})([^#]+)/gi

请参阅regex demo

<强>详情:

  • (#(?:[a-f\d]{3}){1,2}) - 第1组捕获
    • # - 哈希符号
    • (?:[a-f\d]{3}){1,2} - 1或2个十六进制字符序列(由于i修饰符而不区分大小写)
  • ([^#]+) - 第2组捕获除#以外的1个字符。

演示:

&#13;
&#13;
var s = "#FF00FFNick#AA00efName";
var re = /(#(?:[a-f\d]{3}){1,2})([^#]+)/gi;
var res = [], m;
while ((m=re.exec(s)) !== null) {
  res.push([m[1], m[2]]);
}
console.log(res);
&#13;
&#13;
&#13;