如何将字符串数学表达式中的组件与 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?]+)
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);
所以我有这个数据数组,其中包含作为字符串的数学表达式。
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?]+)
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);