我有一根弦,就像,

const string =
    "DEVICE_SIZE IN ('036','048','060','070') AND DEVICE_VOLTAGE IN ('1','3') AND NOT DEVICE_DISCHARGE_AIR IN ('S') AND NOT DEVICE_REFRIGERANT_CIRCUIT IN ('H','C')";

从这里,我需要映射各自的键和值,如DEVICE_SIZE: ["036", "048", "060", "070"]

Current Result:

  const string =
    "DEVICE_SIZE IN ('036','048','060','070') AND DEVICE_VOLTAGE IN ('1','3') AND NOT DEVICE_DISCHARGE_AIR IN ('S') AND NOT DEVICE_REFRIGERANT_CIRCUIT IN ('H','C')";

  const res = string.split('IN ');

  const regExp = /\(([^)]+)\)/;

  const Y = 'AND';

  const data = res.map((item) => {
    if (regExp.exec(item)) {
      return {
        [item.slice(item.indexOf(Y) + Y.length)]: regExp.exec(item)[1],
      };
    }
  });

  console.log('data ', data);

Expected Result:

[
  { "DEVICE_SIZE": ["036", "048", "060", "070"] },
  { "DEVICE_VOLTAGE": ["1", "3"] },
  { "NOT DEVICE_DISCHARGE_AIR": ["s"] },
  { "NOT DEVICE_REFRIGERANT_CIRCUIT": ["H", "C"] },
];

根据我在当前结果中的try ,我无法获得确切的结果.您能帮我达到上述预期效果吗?

Note.我正在try 上述做法,以达到我上一个问题中提到的最终结果 How to get valid object from the string matching respective array?

推荐答案

您可以使用具有2个捕获组的单个正则表达式来匹配键和值.

((?:\bNOT\s+)?\w+)\s+IN\s+\('([^()]*)'\)

请看regex demo.

模式与以下内容匹配:

  • ( Capture group 1
    • (?:\bNOT\s+)?可以 Select 匹配后面不跟1+空格字符的单词
    • \w+个匹配1个或多个单词字符
  • )个封闭组
  • \s+IN\s+在空格字符之间匹配单词IN
  • \('('
  • ([^()]*)捕获group 2,匹配除()之外的1+个字符
  • '\)')

要为对象创建动力学关键点,可以使用Object Initializer,也可以在','上拆分,以创建该值的结果array.

const regex = /((?:\bNOT\s+)?\w+)\s+IN\s+\('([^()]*)'\)/g;
const string = "DEVICE_SIZE IN ('036','048','060','070') AND DEVICE_VOLTAGE IN ('1','3') AND NOT DEVICE_DISCHARGE_AIR IN ('S') AND NOT DEVICE_REFRIGERANT_CIRCUIT IN ('H','C')";
const data = Array.from(
  string.matchAll(regex), m =>
  ({
    [m[1]]: m[2].split("','")
  })
);
console.log(data);

Javascript相关问答推荐

有没有可能使滑动img动画以更快的速度连续?

更改JSON中使用AJAX返回的图像的路径

为什么Mutations 观察器用微任务队列而不是macrotask队列处理?

用于编辑CSS样式的Java脚本

Web Crypto API解密失败,RSA-OAEP

在Matter.js中添加从点A到另一个约束的约束

第二次更新文本输入字段后,Reaction崩溃

如何在不影响隐式类型的情况下将类型分配给对象?

为什么这个.add.group({})在教程中运行得很好,但在我的游戏中就不行了?

JavaScript不重定向配置的PATH

如何访问此数组中的值?

JavaScript&;Reaction-如何避免在不使用字典/对象的情况下出现地狱?

每隔3个项目交替显示,然后每1个项目交替显示

如何使用[ModelJSON,ArrayBuffer]调用tf.loadGraphModelSync

FindByIdAndUpdate在嵌套对象中创建_id

如何压缩图像并将其编码为文本?

在每次重新加载页面时更改指针光标

react :图表负片区域不同 colored颜色

在两个数组范围中输入日期范围

动画可以在Chrome上运行,但不能在Safari上运行