原理

这里正则所使用的匹配方式为"&"取反方式,避免token中包含特殊字符无法匹配完整的问题,且适配了token前后参数可有可无的情况,代码使用的是typescript

定义

/**
 * 获取url参数值
 * @param url Url
 * @param paramName 参数名
 * @returns 匹配的值
 */
export function GetUrlParamValue(url: string, paramName: string): string {
  let value = ''
  if (paramName) {
    const regExp = new RegExp(`${paramName}=(?<${paramName}>[^&]+)&*`)
    const regExpMatchs = url.match(regExp)
    if (regExpMatchs) {
      if (regExpMatchs.groups) {
        const temp = regExpMatchs.groups[paramName]
        if (temp) {
          value = temp
        }
      }
    }
  }
  return value
}

使用

const url = 'http://localhost/baidu/#/callback?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9zaWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvY2xhaW1zL2V4cGlyZWQiOiIxNjU2OTExMjM1IiwiVXNlck5hbWVDTiI6IiVFNyVBRSVBMSVFNyU5MCU4NiVFNSU5MSU5OCIsIlVJRCI6ImFkbWluIiwiRW1haWwiOiJhZG1pbkBhZG1pbi5jb20iLCJHSUQiOiJhZG1pbiIsIlNhcFJvbGUiOiJDUE0iLCJTYXBVc2VyTm8iOiI4MDg2MTE2NiIsIlRpdGxlIjoiM1QiLCJVc2VyTmFtZUVuIjoiYWRtaW4iLCJSb2xlcyI6IiIsIk9sZEdJRCI6IiIsIk1vZHVsZXMiOiJVLFAsTSxELFMsVFMiLCJQZXJzc2lvbnMiOiItMTM2MzEzMDg4IiwiZXhwIjoxNjU5NDkzMjM1LCJpc3MiOiJTT0Rlc2siLCJhdWQiOiJTT0FwaSJ9.nJXls2xyPf3H9o6ZIyZ0pgTqDRipDqfAedcn6QJ9AJQ&param2=xxxxx'
const token = getParamValue(url, 'token')
console.log(token)

标签: js, 正则

评论已关闭