Javascript 在java脚本中使用regex删除查询字符串
我需要删除RESTAPI调用附带的查询参数。下面是需要考虑的示例URL。在每个URL中,我们都需要删除“key”参数及其值Javascript 在java脚本中使用regex删除查询字符串,javascript,regex,Javascript,Regex,我需要删除RESTAPI调用附带的查询参数。下面是需要考虑的示例URL。在每个URL中,我们都需要删除“key”参数及其值 /测试/v1?键=键值&参数1=值1&参数2=值2 /测试/v1?键=键值 /测试/v1?参数1=value1&key=keyval /测试/v1?参数1=value1&key=keyval¶m2=value2 删除键参数后,最终URL应如下所示 /测试/v1?参数1=值1和参数2=值2 /测试/v1 /测试/v1?参数1=值1 /测试/v1?参数1=valu
- /测试/v1?键=键值&参数1=值1&参数2=值2
- /测试/v1?键=键值
- /测试/v1?参数1=value1&key=keyval
- /测试/v1?参数1=value1&key=keyval¶m2=value2
- /测试/v1?参数1=值1和参数2=值2
- /测试/v1
- /测试/v1?参数1=值1
- /测试/v1?参数1=value1=¶m2=value2
(?正则表达式在PHP中工作,但在Javascript中不工作,因为Javascript不支持lookbehind
这里最简单的修复方法是替换lookbehind
(?显然,Javascript不支持lookbehind,因此您的正则表达式将无法工作
在Javascript中,您可以使用以下内容:
repl = input.replace(/(\?)key=[^&]*(?:&|$)|&key=[^&]*/gmi, '$1');
Regex正在使用Regex交替在两条路径上工作:
如果此查询参数正好位于?
之后,则我们抓取参数之后的&
,并将?
放回替换位置
如果此查询参数位于&
之后,则&key=value
将替换为空字符串
javascript中没有lookbehind功能,因此要测试键/值之前的字符,必须匹配它。要使模式在url的查询部分的任何位置都有效,可以在非捕获组中使用替换,并捕获问号:
url = url.replace(/(?:&|(\?))key=[^&#]*(?:(?!\1).)?/, '$1');
注意:#
被排除在字符类之外,以防止url的片段部分(如果有)与键值匹配。如果您想在不使用正则表达式的情况下执行此操作,下面是一个函数:
var removeQueryString = function (str) {
var qm = str.lastIndexOf('?');
var path = str.substr(0, qm + 1);
var querystr = str.substr(qm + 1);
var params = querystr.split('&');
var keyIndex = -1;
for (var i = 0; i < params.length; i++) {
if (params[i].indexOf("key=") === 0) {
keyIndex = i;
break;
}
}
if (keyIndex != -1) {
params.splice(keyIndex, 1);
}
var result = path + params.join('&');
return result;
};
var removeQueryString=函数(str){
var qm=str.lastIndexOf(“?”);
var path=str.substr(0,qm+1);
var querystr=str.substr(qm+1);
var params=querystr.split('&');
var-keyIndex=-1;
对于(变量i=0;i”它给出了一些语法错误。你得到的信息可能是错误的,所以考虑把它们放在你的问题中。解决你的问题了吗?
var removeQueryString = function (str) {
var qm = str.lastIndexOf('?');
var path = str.substr(0, qm + 1);
var querystr = str.substr(qm + 1);
var params = querystr.split('&');
var keyIndex = -1;
for (var i = 0; i < params.length; i++) {
if (params[i].indexOf("key=") === 0) {
keyIndex = i;
break;
}
}
if (keyIndex != -1) {
params.splice(keyIndex, 1);
}
var result = path + params.join('&');
return result;
};