Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将URL中括号中的字符串转换为查询参数:Javascript_Javascript_Jquery_Url - Fatal编程技术网

将URL中括号中的字符串转换为查询参数:Javascript

将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

我想将搜索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_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正是我的要求。