我有简短的表达,例如
aa9bf904-bcf2-4347-ab2c-44174af2557e[Some Value] + SUM(1,1) + aa9bf904-bcf2-4347-ab2c-44174af2557e[Other Value]
aa9bf904-bcf2-4347-ab2c-44174af2557e[Some Value] + aa9bf904-bcf2-4347-ab2c-44174af2557e[Other Value] + SUM(1,1)
我需要将其转换为 json 数组
[
{
text: "aa9bf904-bcf2-4347-ab2c-4417af2557e",
block: "uuid"
},
{
text: "[Some Value]",
block: "value"
},
{
text: "+ SUM(1,1) +",
block: "other"
},
{
text: "aa9bf904-bcf2-4347-ab2c-44174af2557e",
block: "uuid"
},
{
text: "[Other Value]",
block: "value"
},
]
[
{
text: "aa9bf904-bcf2-4347-ab2c-4417af2557e",
block: "uuid"
},
{
text: "[Some Value]",
block: "value"
},
{
text: "+",
block: "other"
},
{
text: "aa9bf904-bcf2-4347-ab2c-44174af2557e",
block: "uuid"
},
{
text: "[Other Value]",
block: "value"
},
{
text: "+ SUM(1,1)",
block: "other"
},
]
目前使用下面的正则表达式将它们匹配成组并迭代matchGroups
以创建一个像上面一样的对象数组。
uuid
和块的分组效果value
很好,但是在对other
块进行分组时遇到了一些麻烦。
let matchGroups = [...expression?.matchAll(/\b[0-9a-f]{8}\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\b[0-9a-f]{12}\b|\[(.*?)\]|^(\*|\+|-\/)(SUM(.*)|MAX(.*))+/gm)]
let output = matchGroups.map() // iterate here to create array of objects
块允许的表达式other
:
(SUM、MIN、MAX 函数的参数不固定)
+ SUM(1,1) +
-> 可以以 +/*- 运算符之一结束+ SUM(1,1,1)
-> 或没有操作符结束+ SUM(1,1) + MAX(1,1) + SUM(1,1)
-> 可以有多种功能