在java脚本中使用正则表达式删除查询字符串
Removing a query string using regex in java script
我需要删除REST API调用附带的查询参数。下面是需要考虑的示例url。在每个URL中,我们需要删除'key'参数及其值。
- /测试/v1 ?关键= keyval& param1 = value1& param2 = value2
- /测试/v1吗?关键= keyval
- /测试/v1 ? param1 = value1&关键= keyval
- /测试/v1 ? param1 = value1&关键= keyval& param2 = value2
去掉key参数后,最终url应该如下所示:
- /测试/v1 ? param1 = value1& param2 = value2
- /测试/v1吗?
- /测试/v1吗?param1 = value1
- /测试/v1 ? param1 = value1 =, param2 = value2
我们使用下面的正则表达式来匹配和替换php中的查询字符串。(https://regex101.com/r/pK0dX3/1)
(& lt; =[?,;])关键=。* ? ($ | (,,))
我们不能在java脚本中使用相同的正则表达式。一旦我们在java脚本中使用它,它会给出一些语法错误。你能帮我们解决相同正则表达式的问题吗?我们如何改变这个正则表达式匹配和删除查询参数如上所述?
显然Javascript不支持向后看,因此你的正则表达式将无法工作。
在Javascript中你可以这样写:
repl = input.replace(/('?)key=[^&]*(?:&|$)|&key=[^&]*/gmi, '$1');
RegEx演示
Regex正在使用 Regex替换:
- 如果这个查询参数正好在
?
之后,那么我们在参数之后抓取&
,并将?
重新替换。 - 如果此查询参数位于
&
之后,则将&key=value
替换为空字符串。
regex可以在PHP中工作,但不能在Javascript中工作,因为Javascript不支持向后看
这里最简单的修复方法是用捕获组([?&;])
中的等效字符替换(?<=[?&;])
后面的字符,并使用反向引用($1
)将该位插入到替换字符串中。
var path = '/test/v1?key=keyval¶m1=value1¶m2=value2';
var regex = /([?&;])key=.*?($|[&;])/;
console.log(path.replace(regex, '$1'); // outputs '/test/v1?param1=value1¶m2=value2'
不相信regex是删除查询参数最可靠的方式,但那是另一回事:-)
如果您不想使用正则表达式,这里有一个函数可以做到这一点:
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;
};
在javascript中不提供lookbehind功能,因此要在键/值之前测试字符,您必须匹配它。要使该模式在url的查询部分的任何位置都能工作,您可以在非捕获组中使用替换,并且捕获问号:
url = url.replace(/(?:&|('?))key=[^&#]*(?:(?!'1).)?/, '$1');
注意:#
被排除在字符类之外,以防止url的片段部分(如果有的话)与键值匹配
相关文章:
- 问:使用正则表达式删除内容
- 正则表达式删除最后一个数字之后的字符串
- 使用正则表达式删除所有 html 属性(替换)
- 使用正则表达式删除标记时,Firefox和Chrome之间存在不一致
- 使用正则表达式删除网址参数
- 使用正则表达式删除段落开头和结尾的换行符
- 使用 Javascript 正则表达式删除字符后的所有内容
- Javascript 和正则表达式:删除除第一个字符之外的 evryting,如果是一个数字
- 正则表达式删除仅包含空子项的空 html 标记
- Javascript 正则表达式删除重复的空格和重复的空格 与此同时
- 正则表达式删除特定值的 x-href
- 正则表达式删除 - 除非前面有其他运算符
- 如何在 JavaScript 中使用正则表达式删除 .com,.org,.co.uk,.co.us
- 在 javascript 中使用正则表达式删除 html 标记
- JS 和正则表达式 - 删除括号前的逗号
- 我可以使用正则表达式删除列表项吗?
- 正则表达式删除语句
- 正则表达式删除所有白色景观,除了单词之间的一个
- 通过正则表达式删除符号
- 正则表达式删除换行符和内容之间的空格