我是RegExp和JS的新手(来自Python),所以这可能是一个简单的问题: 我试图在Javascript中编写代数计算器,将代数方程作为字符串接收,例如,
string = 'x^2 + 30x -12 = 4x^2 - 12x + 30';
算法已经能够在单个列表中打破字符串,右侧的所有值都乘以-1,所以我可以将它全部等同为0,但是,解决方程的步骤之一涉及创建一个哈希表/字典,将变量作为键。 上面的字符串会产生一个列表 eq :
eq = ['x^2', '+30x', '-12', '-4x^2', '+12x', '-30'];
我目前正在计划迭代这个列表,并使用RegExp识别变量和相应的乘数,所以我可以创建一个hashTable / Dictionary,它允许我简化等式,例如:
hashTable = {
'x^2': [1, -4],
'x': [30, 12],
' ': [-12]
}
我打算在数组中使用某种 for 循环,并在每个字符串上应用匹配来获取我需要的值,但我很坦率地说,我很难过。
我已经使用RegExp将字符串分成等式的各个部分并删除最终的空格,但我无法想象在{{1}中将-4
与x^2
分开的方法}。
答案 0 :(得分:1)
你可以试试这个
(-?\d+)x\^\d+
。
执行匹配功能时:
var res = "-4x^2".match(/(-?\d+)x\^\d+/)
你将得到一个数组:[ "-4x^2", "-4" ]
你有' -4'在res [1]。
通过在第二个\d+
(数字字符)上添加另一个组,您可以检索x次幂。
var res = "-4x^2".match(/(-?\d+)x\^(\d+)/) //res = [ "-4x^2", "-4", "2" ]
希望有所帮助
答案 1 :(得分:0)
如果您知道哈希表的LHS将位于字符串的末尾。让我们说'4x',x在结尾或'-4x ^ 2',其中x ^ 2结束,然后我们可以得到表达式的数字:
var exp = '-4x^2'
exp.split('x^2')[0] // will return -4
我希望这就是你要找的东西。
答案 2 :(得分:0)
function splitTerm(term) {
var regex = /([+-]?)([0-9]*)?([a-z](\^[0-9]+)?)?/
var match = regex.exec(term);
return {
constant: parseInt((match[1] || '') + (match[2] || 1)),
variable: match[3]
}
}
splitTerm('x^2'); // => {constant: 1, variable: "x^2"}
splitTerm('+30x'); // => {constant: 30, variable: "x"}
splitTerm('-12'); // => {constant: -12, variable: undefined}
此外,这些工具可以帮助您分析和理解正则表达式: