将URL中括号中的字符串转换为查询参数:Javascript
我想将搜索URL中将URL中括号中的字符串转换为查询参数:Javascript,javascript,jquery,url,Javascript,Jquery,Url,我想将搜索URL中{}中的字符串转换为查询参数,以帮助用户在web分析工具中捕获搜索词 比如说,这就是我想做的 搜索URL为: var search_url_format = '/search/{city}-{service} example.com/search/newyorkgyms?dev=desktop&id=1220391131 用户输入将为: var search_url_format = '/search/{city}-{service} 输出URL: var search_u
{}
中的字符串转换为查询参数,以帮助用户在web分析工具中捕获搜索词
比如说,这就是我想做的
搜索URL为:
var search_url_format = '/search/{city}-{service}
example.com/search/newyorkgyms?dev=desktop&id=1220391131
用户输入将为:
var search_url_format = '/search/{city}-{service}
输出URL:
var search_url_format = '/search/{city}-{service}
example.com/search?city=newyork&service=gyms&dev=desktop&id=1220391131
问题是当使用regex时,它捕获整个字符串{city}-{service}
但是我想要的是[{city},{service}]
URL格式也可以是
搜索/{city}/{service}/
搜索/{city}{service}/
我尝试的是一个变量
它返回正确的输出
例如:URL:/search/newyork
用户输入:/search/{city}
输出:/search/newyork?city=newyork
URL:/search-germany
用户输入:/search-{country}
输出:/搜索德国?国家=德国
var search\u url\u format='/search/{city}'//用户在括号中输入任何变量
var urloutput='/search/newyork'//演示URL
//日志输出
log(URL2Query(搜索url格式))//输出:'/search/newyork?city=newyork'
函数URL2Query(url){
var variableReg=new RegExp(/{(.*)}/)
var string_url=variableReg.exec(url)
var variable1=string\u url[0]
//捕获变量
var reg=new RegExp(url.replace(variable1'([^\?\\/\\&]+))
var search_string=reg.exec(urloutput)[1]
if(location.search.length>0)//如果没有查询参数
{
返回url输出+“?”+字符串\u url[1]+“=”+搜索\u字符串
}否则{
返回url输出+“&”+字符串\u url[1]+“=”+搜索字符串
}
}
您可以假设您的“变量”是字母数字,而不是任何字符。在这个假设下,{,“-”,“u”等将是标点符号
因此,您的分组regexp可以是/({\w+})/g
//example
const r = /({\w+})/g;
let variable;
const url = '/search/{city}-{service}';
while ((variable = r.exec(url)) !== null) {
let msg = 'Found ' + variable[0] + '. ';
msg += 'Next match starts at ' + r.lastIndex;
console.log(msg);
}
您缺少两件事: 括号用于匹配组,并使用包含“{”符号的。*。 因此可以使用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}]
在您的示例中,这不会显示所有匹配项,但会显示2次城市!在我们的regexpYes@laurent中缺少/g,/({\w+})/g正是我的要求。