我想将搜索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/