0

我有简短的表达,例如

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 函数的参数不固定)

  1. + SUM(1,1) +-> 可以以 +/*- 运算符之一结束
  2. + SUM(1,1,1)-> 或没有操作符结束
  3. + SUM(1,1) + MAX(1,1) + SUM(1,1)-> 可以有多种功能
4

0 回答 0