我正在尝试使用正则表达式删除网址中的特定参数。
//Here are the scenarios of what I want to remove in the url
'?pIds=123,2311' => ''
'?pIds=123,2311&deal=true' => '?deals=true'
'?pIds=123' => ''
'?pIds=123&deals=true' => '?deals=true'
'&pIds=123,2311' => ''
'&pIds=123,2311&deals=true' => '&deals=true'
'&pIds=123' => ''
'&pIds=123&deals=true' => '&deals=true'
const a = '?pIds=123,2311&deals=true';
a.replace(/&?pIds=\d+,?\d+/i, '');
是否可以为这些场景创建单个正则表达式?我怎样才能有条件地拥有?或 & 如果 pIds 分别是第一个或中间参数?
最佳答案
您可以在 Javascript 中使用此正则表达式进行搜索:
/[?&]pIds=[^&]*$|([?&])pIds=[^&]*&/
正则表达式分解:
[?&]pIds=[^&]*$
:匹配?
或&
后跟pIds=
.$
确保这是查询字符串中的唯一参数。|
:或([?&])pIds=[^&]*&
:匹配?
或&
后跟pIds=
后跟&
。这是查询字符串中多了一个参数的情况。
代码:
var arr=['?pIds=123,2311',
'?pIds=123,2311&deal=true',
'?pIds=123',
'?pIds=123&deals=true',
'&pIds=123,2311',
'&pIds=123,2311&deals=true',
'&pIds=123',
'&pIds=123&deals=true'];
var re = /[?&]pIds=[^&]*$|([?&])pIds=[^&]*&/;
for (i=0; i<arr.length; i++) {
console.log(arr[i], ' => ', arr[i].replace(re, '$1'));
}
关于javascript - 用于删除部分 URL 参数的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46005916/