我有一串
"{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 }
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]+)
=
(
\[[^\]]*]
|
.*?
)
[,\}]
1条答案
按热度按时间x6492ojm1#
下面是一个解决方案,它做了几个假设,这些假设可能与您的需求不同:
[
和]
开始和结束的值假定为包含数字的数组输出量:
正则表达式说明:
([a-zA-Z]+)
-捕获关键字第一组=
-文字=
符号(
-值的捕获组2的开始\[[^\]]*]
-表示[
...]
数组的模式|
-逻辑或.*?
-非贪婪扫描)
-值的撷取群组2结尾[,\}]
--应为逗号或花括号