如何从 URL 中过滤特定参数?
Posted
技术标签:
【中文标题】如何从 URL 中过滤特定参数?【英文标题】:How to filter specific params from URL? 【发布时间】:2019-09-14 23:12:13 【问题描述】:我需要从我的 URL 中过滤掉参数。 比如:
URL = test1/test2/:test3
一些过滤器输出 = test3
URL = test1/:test2/test3
一些过滤器输出 = test2
URL = :test1/test2/test3
一些过滤器输出 = test1
URL = :test1/test2/test3/:test4
一些过滤器输出 = test1, test4
我自己尝试了一些 REGEX 和子字符串过滤器,但考虑到上面 1 个过滤器中所有可能的 URL 示例,我无法真正让它工作。
【问题讨论】:
你为什么不向我们展示你的正则表达式? Getting all URL parameters using regex的可能重复 将您尝试过的代码添加到您的问题中 例如 URL.substring(URL.indexOf(":")+1) 适用于示例 1,输出为 'test 3'。但它不适用于其余部分。 '重复的建议'也不同。 【参考方案1】:const REGEX = /\:([A-z0-9-._~:?#\[\]\@\!\$\&\'\(\)\*\+\,\;\=]+)/g;
function findMatches(re, str, matches = [])
const m = re.exec(str)
m && matches.push(m[1]) && findMatches(re, str, matches)
return matches
const urls = [
'test1/test2/:test3',
'test1/:test2/test3',
':test1/test2/test3',
':test1/test2/test3/:test4',
];
const values = urls.map(url => findMatches(REGEX, url));
console.log(values);
【讨论】:
【参考方案2】:像这样?:
https://regex101.com/r/Jh0BVJ/3/
regex = new RegExp(/:(?<match>(?:[\w\-.~:?#\[\]@!$&'()*+,;=%]*)\d+)+/gm)
url = ":test1/test2/test3/:test4"
console.log(url.match(regex))
【讨论】:
【参考方案3】:您实际上只是在创建另一个路由器:
https://github.com/krasimir/navigo
我没用过 navigo,但它看起来足够强大:
router
.on('/user/:id/:action', function (params)
// If we have http://example.com/user/42/save as a url then
// params.id = 42
// params.action = save
)
.resolve();
router.notFound(function (query)
// ...
);
现在使用它:
router.navigate('/products/list');
//Or even with FQDN:
router.navigate('http://example.com/products/list', true);
【讨论】:
我的问题与如何导航或使用路线无关。我需要过滤掉参数并将它们保存在一个列表中(例如)以上是关于如何从 URL 中过滤特定参数?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 URL 参数从 GWT 客户端发送到服务器端进行验证
如何仅针对特定 url 添加 Spring Security 验证码过滤器
如何在我的过滤器上过滤特定的URL以实现ContainerRequestFilter和ContainerResponseFilter?