正则表达式帮助 - 匹配列表中未列出的任何 URL 参数和值
Regex Help - Match any URL Parameter & Value not in List
感谢您查看此内容!
我正在尝试构建一些在 JavaScript 中工作的正则表达式,它将匹配所有 URL 参数及其不在我的预定义列表中的值。 例:
原始网址:
/folder/index.html?knownParamA=1234&unknownParamA=1234&knownParamB=1234&unknownParamB=1234
我的已知参数列表:
((knownParamA|knownParamB|knownParamC)=[^&]*&?)/gi
生成的(已清理(网址:
/folder/index.html?knownParamA=1234&unknownParam=1234
最终,我想捕获任何URL的清理版本,仅包含我需要的参数和值。 我的网站上有大量参数对我来说毫无意义,只会妨碍我。 我发现的一个解决方案需要回顾一下,但我认为JavaScript不支持这些。
非常感谢您的帮助!!
基于以下反馈的解决方案:
pageURL = window.location.pathname + window.location.search;
knownParams = 'knownParamA|knownParamB|knownParamC|knownParamD';
var urlCleanerRegexStep1 = new RegExp('[?&](?!(?:' + knownParams + ')(?==))[^=]+=[^&]*', 'gi');
var urlCleanerRegexStep2 = new RegExp('[?&]([^=]+=[^&]*)', '');
cleanPageURL = pageURL.replace(urlCleanerRegexStep1, "").replace(urlCleanerRegexStep2, '?$1');
否定搜索很棘手,需要零宽度的前瞻。
这将查找未知参数并将其从 URL 中删除:(更新 2:这不再保留以已知参数开头的未知参数。
step1 = url.replace(/[?&](?!(?:knownParamA|knownParamB)(?==))[^=]+=[^&]*/gi, '');
// "/folder/index.html?knownParamA=1234&knownParamB=1234"
但是,如果第一个参数被去除,则第一个剩余参数前面将有一个&
而不是?
,您也需要替换它:
clean = step1.replace(/[?&]([^=]+=[^&]*)/, '?$1');
// "/folder/index.html?knownParamA=1234&knownParamB=1234"
当然,您可以将这些链接在一起:
clean = url.replace(/[?&](?!(?:knownParamA|knownParamB)(?==))[^=]+=[^&]*/gi, '').
replace(/[?&]([^=]+=[^&]*)/, '?$1');
更新:我已经包含了user3842539的代码扩展,因为这里比在评论中更容易阅读。
pageURL = window.location.pathname + window.location.search;
knownParams = 'knownParamA|knownParamB|knownParamC|knownParamD';
var urlCleanerRegexStep1 = new RegExp('[?&](?!(?:' + knownParams + ')(?==))[^=]+=[^&]*', 'gi');
var urlCleanerRegexStep2 = new RegExp('[?&]([^=]+=[^&]*)', '');
cleanPageURL = pageURL.replace(urlCleanerRegexStep1, '').replace(urlCleanerRegexStep2, '?$1');
为了帮助您解释这些正则表达式,请执行以下操作:
-
[?&]
=?
或&
-
(
......)
= 捕获的组 -
(?!
......)
= 后跟此组的匹配项 -
(?:
......)
= 未捕获的组 -
(?=
......)
= 后跟该组的匹配项 -
=
==
-
[^=]
= 除=
以外的任何字符 -
+
= 一次或多次 -
[^&]
= 除&
以外的任何字符 -
*
= 零次或更多次
在正则表达式主体之外,
g
标志表示"所有比赛"(而不是仅第一场比赛(i
标志表示"不区分大小写">- 在替换字符串中,
$1
表示"捕获的组 1">
相关文章:
- 将任何CDN配置为只传递一个文件,无论请求的url是什么
- 使用Javascript/jQuery以编程方式将当前锚点/哈希/片段附加到任何表单操作url
- 在不重新加载的情况下更改标头URL的任何方法
- 如果URL中有任何字符串变体匹配,则返回true
- 可用于重定向到任何 URL 的 JavaScript 函数
- 在不使用任何http、https或ftp的情况下验证URL
- 有没有任何方法可以使<选择>转到url
- 有些人有任何关于如何使用Modified Java Script Value处理返回Json(url)的示例
- 查找任何未定义的变量并从url字符串中隐藏
- Url已更改,但AngularJS中没有显示任何内容
- 我无法在我的网站上获取任何图像或显示任何 URL 图像
- 为与第一段匹配的任何 URL 添加活动类
- 正则表达式帮助 - 匹配列表中未列出的任何 URL 参数和值
- 如何通过javascript和代理简单地从任何URL读取html
- 转换class.phpmailer.php中的任何url
- jQuery:添加前缀到任何url (.attr)
- 生成嵌入代码给定的任何url
- 任何URL的Colorbox模态
- 填写任何url的文本框与数据从我的javascript / php代码
- 只从任何URL获取域