我想将搜索 URL 中的 {}
中的字符串转换为查询参数,这将有助于用户在网络分析工具中捕获搜索词。
这就是我想做的,让我们说
搜索网址是:
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格式也可以是这样的
search/{city}/{service}/
search/{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/