Не уверен, что RegExp
является строго необходимым, поскольку шаблоны, которые вы хотите заменить, соответствуют именам ваших свойств. Вы могли бы сделать что-то вроде этого:
const urlPaths = {
"Signature": "signature/(signatureId)",
"Rule": "signature/(signatureId)/rule/(ruleId)",
};
const aId1 = {
signatureId: "999"
};
const aId2 = {
signatureId: "123",
ruleId: "456"
};
const createUrl = (url, aId) => {
let newUrl = url;
Object.entries(aId).forEach(([key, value]) => {
newUrl = newUrl.replace(`(${key})`, value);
});
return newUrl;
}
console.log(createUrl(urlPaths.Signature, aId1));
console.log(createUrl(urlPaths.Rule, aId2));
Если вы хотите использовать RegExp
, вот пример того, как это может работать тоже
const urlPaths = {
"Signature": "signature/(signatureId)",
"Rule": "signature/(signatureId)/rule/(ruleId)",
};
const aId1 = {
signatureId: "999"
};
const aId2 = {
signatureId: "123",
ruleId: "456"
};
const createUrlRegExp = (url, regexs, aId) => {
let newUrl = url;
const replacer = match => aId[match.slice(1, -1)]; // get rid of parentheses around match
regexs.forEach(regex => {
newUrl = newUrl.replace(regex, replacer)
});
return newUrl;
};
console.log(createUrlRegExp(urlPaths.Signature, [/\(signatureId\)/], aId1));
console.log(createUrlRegExp(urlPaths.Rule, [/\(signatureId\)/, /\(ruleId\)/], aId2));