微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

问号表示未知数字,因此它是数字的一部分。如何将它们分开,以便将因子/加数、运算和答案存储在数组中?

这是我想要得到的结果:

'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=??'          --->    ['??','??']
'??+??=??'         --->    ['??','??']

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

提前致谢!

解决方法

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

-?[\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=?','??+??=??','?33438-103326=410112'
];

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

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

console.log(groups);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。