我想将搜索URL中{}中的字符串转换为查询参数,这将帮助用户捕获Web分析工具中的搜索词。

这就是我想做的事

搜索网址是:


example.com/search/newyork-gyms?dev=desktop&id=1220391131


用户输入将是:

var search_url_format = '/search/{city}-{service}


输出网址:


example.com/search?city=newyork&service=gyms&dev=desktop&id=1220391131


问题是何时使用正则表达式{(.*)}捕获整个字符串{city}-{service}

但是我想要的是[{city},{service}]

URL格式也可以像


搜索/ {city} / {service} /

搜索/ {city} _ {service} /


我尝试过的是单个变量。

它返回正确的输出。

例如:URL:/search/newyork

用户输入:/search/{city}

输出:/search/newyork?city=newyork

网址:/search-germany

用户输入:/search-{country}

输出:/search-germany?country=germany



var search_url_format = '/search/{city}' //User Enters any variable in brackets
var urloutput = '/search/newyork' //Demo URL

//Log output

console.log(URL2Query(search_url_format)) //Output: '/search/newyork?city=newyork'

function URL2Query(url) {
  var variableReg = new RegExp(/{(.*)}/)
  var string_url = variableReg.exec(url)

  var variable1 = string_url[0]


  //Capture the variable
  var reg = new RegExp(url.replace(variable1, '([^\?|\/|&]+)'))
  var search_string = reg.exec(urloutput)[1]


  if (location.search.length > 0) // if no query parameters
  {
    return urloutput + "?" + string_url[1] + "=" + search_string
  } else {
    return urloutput + "&" + string_url[1] + "=" + search_string

  }
}

最佳答案

您缺少两件事:
括号以匹配组,您可以使用。*,其中包括“ {”符号。
因此可以这样使用match而不是exec:

var search_url_format = '/search/{city}-{service}' //User Enters any
var variableReg = new RegExp(/({\w+})/g)
var string_url = url.match(variableReg); // [{city}, {service}]

关于javascript - 将URL中括号内的字符串转换为查询参数:Javascript,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48059876/

10-12 12:40
查看更多