我有類似的字串
"{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
}
uj5u.com熱心網友回復:
這是一個做出幾個假設的解決方案,可能與您的需求不同:
- 鍵被假定為僅 alpha 字符
- 具有數字模式的值被假定為數字
[分別以和開頭和結尾的值]被假定為包含數字的陣列
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 結束以獲取值[,\}]-- 期望逗號或大括號
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/525293.html
下一篇:嘗試遍歷陣列并注釋它們
