【问题标题】:Extract hex-code data from custom string从自定义字符串中提取十六进制代码数据
【发布时间】:2017-04-28 13:26:21
【问题描述】:

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

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

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

我写如下代码

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

 alert(str.match(reg));

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

【问题讨论】:

  • 也许/(#[a-f\d]{6})([^#]+)/gi 可以吗?此格式是否固定且名称不能包含#?或者,(#(?:[a-f\d]{3}){1,2})([^#]+)
  • 您对预期结果的格式有点混乱。通常数组由 [] 表示,对象字面量由 {} 表示
  • 我认为示例输出在问题中“示意性地”显示,只是为了显示应提取字符串的哪些部分以及应如何对它们进行分组。 Victor,如果您需要更具体的输出类型,请告知。

标签: javascript regex hex


【解决方案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+ 个字符。

演示:

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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-25
    • 2014-02-18
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    相关资源
    最近更新 更多