Заменить все строки, начинающиеся с двоеточия, как путь экспресс-маршрута - PullRequest
0 голосов
/ 31 октября 2019

У меня есть такие строки:

const a = '/example/:someItemUuid/hello'
const b = '/example/:someItemUuid/hello/:otherItemUuid'

const params = {
  someItemUuid: '12345',
  otherItemUuid: '67890'
}

Я ищу простой способ пройти:

buildUrl(a, params) и получить /example/12345/hello

buildUrl(b, params) и получить /example/12345/hello/67890

Существует ли простая библиотека путей, которая делает это, или простой способ, использующий lodash?

Ответы [ 2 ]

1 голос
/ 31 октября 2019

Вам не нужно разделять и присоединяться. Вы можете использовать заменить и это обратный вызов

enter image description here

const a = '/example/:someItemUuid/hello'
const b = '/example/:someItemUuid/hello/:otherItemUuid'
const params = {someItemUuid: '12345',otherItemUuid: '67890'}

let replaceValues = (str,params) =>
  str.replace(/(^|\/):(\w+)(?=\/|$)/g, (m, g1, g2) => g1 + (params[g2] || m))

console.log(replaceValues(a,params))
console.log(replaceValues(b,params))

Если ваша среда также поддерживает lookbehind, то вы можете использовать

`(?<=^|\/):(\w+)(?=\/|$)
1 голос
/ 31 октября 2019
  const fullLink = page.split('/').map(i => {
    if (i.match(/^:/)) return camelizePayload[i.replace(/^:/, '')]
    return i
  }).join('/')
...