javascript - 用于删除部分 URL 参数的正则表达式

标签 javascript regex url

我正在尝试使用正则表达式删除网址中的特定参数。

//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'));
}

RegEx Demo

关于javascript - 用于删除部分 URL 参数的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46005916/

相关文章:

javascript - 失去文本框焦点时如何删除所有出现的字符?

xslt - 使用 xslt 查询字符串

javascript - 如何使用 javascript/jquery 从 URL 中删除获取变量和文件名?

javascript - 从 JavaScript 正则表达式中获取一组匹配项和纯字符串

python - 用正则表达式替换单词列表

javascript - 验证 javascript 中的有效 html 标签

php - 什么是符合 RFC 且有效的正则表达式,用于检查字符串是否为有效 URL

javascript - 使用 Google Maps JS API 随机拖动/平移

javascript - Puppeteer 不等待超时

javascript - 如何在 AngularJS 中测试具有 $q promise 和 karma 的服务功能