var str = '/project/:projectId/menu/:menuId';
let projectId = getVal(str,"project");
let menuId = getVal(str,"menu");
function getVal(str,attr){
let reg = new RegExp(`/${attr}/:([^/]+)`,"gi");
return reg.exec(str)[1];
}
Просмотр назад нужен, если по-простому исправлять: regex = /(?<=:)([a-z0-9_]*)/gi;
Ещё можно через цикл сделать. А так вообще зависит от условий. Если структура всегда такая, ровно 4 секции, ровно две из них с двоеточием, и меняются только a-z, то решение я написал выше, иначе нужно будет усложнять регулярку и/или сопутствующий код.