regex 正则表达式获取字符串对象的键值,如{ key=value,.... }

cnh2zyt3  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(134)

我有一串

"{format=svg, width=383, height=480, transform=[40, 40, 40, 40], scaleX=1, scaleY=1}"

我怎么能用正则表达式返回键值的对象呢?非常感谢!

{
  format: 'svg',
  width: 383,
  height: 480,
  transform: [40, 40, 40, 40],
  scaleX: 1,
  scaleY: 1
}
x6492ojm

x6492ojm1#

下面是一个解决方案,它做了几个假设,这些假设可能与您的需求不同:

  • 假定键仅为字母字符
  • 具有数字模式的值被假定为数字
  • 分别以[]开始和结束的值假定为包含数字的数组
const str = "{format=svg, width=383, height=480, transform=[40, 40, 40, 40], scaleX=1, scaleY=1}";
const regex = /([a-zA-Z]+)=(\[[^\]]*]|.*?)[,\}]/g;
let obj = {};
str.replace(regex, function(m, key, val) {
  if(/^-?\d+(\.\d+)?$/.test(val)) {
    val = Number(val);
  } else if(/^\[.*\]$/.test(val)) {
    val = val
      .replace(/^\[(.*)\]$/, '$1')  // get rid of `[` and `]`
      .split(/, */)                 // split on comma and optional space
      .map(num => Number(num));     // convert each item to a number
  }
  obj[key] = val;
  return '';
});
console.log(obj);

输出量:

{
  "format": "svg",
  "width": 383,
  "height": 480,
  "transform": [
    40,
    40,
    40,
    40
  ],
  "scaleX": 1,
  "scaleY": 1
}

正则表达式说明:

  • ([a-zA-Z]+)-捕获关键字第一组
  • =-文字=符号
  • (-值的捕获组2的开始
  • \[[^\]]*]-表示[... ]数组的模式
  • |-逻辑或
  • .*?-非贪婪扫描
  • )-值的撷取群组2结尾
  • [,\}]--应为逗号或花括号

相关问题