Извлекать переменные, коэффициенты и полномочия из строки полинома (Javascript) - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь извлечь различные части полиномиальной строки, такие как переменные, коэффициенты и степени из строки в JavaScript.Пока что я могу извлечь их из простой полиномиальной строки, например "-13x ^ 2 + 2-12x ^ 4".

Я хочу расширить это, чтобы извлечь из относительно сложной полиномиальной строки.Что-то вроде "-13x ^ 2y ^ 3 + 2-12x ^ -4".

Вот код, который у меня есть:

function extractPolynomial(polynomialStr) {
    var arr = [];
    polynomialStr = polynomialStr.match(/[+-]?\d+(x|y)(\^\d)*|[+-\s]\d+/g);
    polynomialStr.forEach(function (match) {
        var vals = match.split('^');
        var coeff = parseInt(vals[0]);
        var variable = vals[0].match(/[a-z]/gi) ? vals[0].match(/[a-z]/gi)[0] : "";
        var power = 1;
        if(vals.length > 1){
            power = parseInt(vals[1]);
        }
        else {
            if (variable === "") {
                power = 0;
            }
            else {
                power = 1;
            }
        }
        arr.push({
            coeff: coeff,
            variable: variable,
            power: power
        })
    });
    return arr;
}

Вот скрипка: https://jsfiddle.net/889ruq7a/

1 Ответ

0 голосов
/ 26 апреля 2018

После небольшого исследования регулярных выражений я получил то, что хотел.Вот функция для извлечения всей информации из полинома:

function  extractPolynomial(polynomialStr) {        
    var arr = [];
    polynomialStr = polynomialStr.match(/[+-]?\d*(x|y)(\^\d)*((y|x)(\^\d)*)*|[+-\s]\d+/g);
    polynomialStr.forEach(function (match) {
        var variable = match.match(/([a-z]\^\d|[a-z])/gi) ? match.match(/([a-z]\^\d|[a-z])/gi).join("") : " ";
        var coeff = parseFloat(match.split(variable)[0]);
        var power = 1;
        var variables = [];
        if (variable != " ") {
            var tempVars = variable.match(/([a-z]\^\d|[a-z])/gi);
            for (var i = 0; i < tempVars.length; i++) {
                var oneVariable = { variable: "", power: 0 };
                oneVariable.variable = tempVars[i].match(/[a-z]/gi)[0];
                var tempV = tempVars[i].split("^");
                if (tempV.length > 1) {
                    oneVariable.power = parseFloat(tempV[1]);
                }
                else {
                    oneVariable.power = 1;
                }
                variables.push(oneVariable);
            }
        }
        else {
            variables.push({ variable: "", power: 0 });
        }
        arr.push({
            coeff: coeff,
            variables: variables
        });
    });
    return arr;
};

Вот скрипка для нее: https://jsfiddle.net/khubaib/40hm80qu/5/

...