Regex для получения параметров объекта из строки и получения значения этого параметра из объекта JSON / Js - PullRequest
0 голосов
/ 02 января 2019

У меня есть две строки и объект Js

var strArr = '$PARAMS["version"]["config"]$';
var strObj = "$PARAMS.version.config$;

и JS Object

var obj = {
    "version": {
        "config": {
            "prod": "stackoverflow"
        }
    }
}

Строка может прийти как strArr или strObj, я пытаюсь получить регулярное выражение для извлечения версии и конфигурации (и т. Д.) Из обеих строк и получить значение для этого из Js obj

Например: obj["version"]["config]

Я могу решить эту проблему для strArr, т. Е. '$ PARAMS ["version"] ["config"] $', необходимо изменить регулярное выражение в приведенной ниже функции getVal, чтобы получить работающий для strObj.

Также в функции ниже path может быть либо strArr, либо strObj

function getVal(obj, path) => {
    let regex = /\["(.*?)"\]/mg;
    let m;

    while ((m = regex.exec(path)) !== null) {
        // This is necessary to avoid infinite loops with zero-width matches
        if (m.index === regex.lastIndex) {
            regex.lastIndex++;
        }

        if(typeof obj[m[1]] !== 'undefined') obj = obj[m[1]];
        else return obj[m[1]];
    }
    return obj;
}

1 Ответ

0 голосов
/ 03 января 2019

Изменение регулярного выражения на /. ([\ W] ) | ["(. ?)"] / Mg и добавление следующей строки в функцию решило проблему иначе if (typeof obj [м [2]]! == 'undefined') obj = obj [м [2]];

Финальная функция выглядит как

function getVal(obj, path) {
                    let regex = /\.([\w]*)|\["(.*?)"\]/mg;
                    // let regex = /\["(.*?)"\]/mg;
                    let m;
                    while ((m = regex.exec(path)) !== null) {
                        // This is necessary to avoid infinite loops with zero-width matches
                        if (m.index === regex.lastIndex) {
                            regex.lastIndex++;
                        }
                        if(typeof obj[m[1]] !== 'undefined') obj = obj[m[1]];
                        else if(typeof obj[m[2]] !== 'undefined') obj = obj[m[2]];
                        //TODO: Add logic to through error if the parameter is not found
                    }
                    return obj;
                }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...