如何将字符串数学表达式中的组件与 javascript 中的未知数字匹配?

How do I match components in a string math expression with unknown digits in javascript?

所以我有这个数据数组,其中包含作为字符串的数学表达式。

var data = ['1+1=?', '123*45?=5?088', '-5?*-1=5?', '19--45=5?', '??*??=302?', '?*11=??', '??*1=??', '??+??=??']

问号表示未知数字,因此它是数字的一部分。如何将它们拆分,以便我将 factors/addends、运算和等式右侧的答案存储在一个数组中?

这是我想要得到的结果:

'1+1=?'            --->    ['1', '+', '1', '?']
'123*45?=5?088'    --->    ['123', '*', '45?' '5?088']
'-5?*-1=5?'        --->    ['-5?', '*', '-1', 5?']
'19--45=5?'        --->    ['19', '-', '-45', '5?']
'??*??=302?'       --->    ['??', '*', '??', '302?']
'?*11=??'          --->    ['?', '*', '11', '??']
'??*1=??'          --->    ['??', '*', '1', '??']
'??+??=??'         --->    ['??', '+', '??', '??']

这对我来说很棘手,尤其是有一个负数的减法。

提前致谢!

您可以试试这个正则表达式:

-?[\d?]+|[^=]
  • -?[\d?]+:数字和 ? 的任意组合,前导 -.
  • |: 或
  • [^=]: 不是 =

勾选 test cases

const texts = [
  '1+1=?',
  '123*45?=5?088',
  '-5?*-1=5?',
  '19--45=5?',
  '??*??=302?',
  '?*11=??',
  '??*1=??',
  '??+??=??'
];

const regex = /-?[\d?]+|[^=]/g;

const groups = texts.map(text => text.match(regex));

console.log(groups);


编辑

如果格式一致,你可以试试这个正则表达式来得到等式的每一部分:

(-?[\d?]+)([^=\d?])(-?[\d?]+)=(-?[\d?]+)

test cases

const texts = [
  '1+1=?',
  '123*45?=5?088',
  '-5?*-1=5?',
  '19--45=5?',
  '??*??=302?',
  '?*11=??',
  '??*1=??',
  '??+??=??',
  '?33438-103326=410112'
];

const regex = /^(-?[\d?]+)([^=\d?])(-?[\d?]+)=(-?[\d?]+)$/;

const groups = texts.map(text => text.match(regex).splice(1));

console.log(groups);