parse.js 1.13 KB
/**
 * 解析表达式中${param}格式的参数
 * @param {*} exp 表达式
 * @param {*} ctx 参数值
 * @returns 解析后的表达式
 */
export const parseExp = (exp, ctx) => {
  if (!exp || exp.constructor != String) return exp
  ctx = ctx || {}
  var reg = /(\$\{(\w+)\})/,
    match = null,
    count = 0

  while ((match = reg.exec(exp))) {
    count++
    // 避免死循环
    if (count > 999) {
      break
    }
    if (match != null) {
      exp = exp.replace(
        match[1],
        ctx.hasOwnProperty(match[2]) ? ctx[match[2]] : ''
      )
    }
  }
  return exp
}

// 解析URL地址,如果url地址包含了${form}这样的占位符,会按照config.js中配置的对应服务的地址替换。
export const parseUrl = (url) => {
  if (url === '') return
  var ctx = window.context,
    reg = /^(\$\{(\w+)\})\/.*$/

  var match = reg.exec(url)
  if (match != null) {
    var name = match[2],
      mc = match[1],
      val = ctx[name]
    if (!val) {
      throw new Error(
        `The '${name}' in url:${url} does not defined in context provider.`
      )
    }
    return url.replace(mc, val)
  } else {
    return url
  }
}