JavaScript - 使用RegExp

时间:2016-03-15 13:31:28

标签: javascript regex

我是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}中将-4x^2分开的方法}。

3 个答案:

答案 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}

此外,这些工具可以帮助您分析和理解正则表达式: