如何从 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 中过滤特定参数?的主要内容,如果未能解决你的问题,请参考以下文章

在 servlet 过滤器中排除特定 URL

如何将 URL 参数从 GWT 客户端发送到服务器端进行验证

如何仅针对特定 url 添加 Spring Security 验证码过滤器

如何从当前url获取参数

如何判断请求URL中是不是存在@PathVariable?

如何在我的过滤器上过滤特定的URL以实现ContainerRequestFilter和ContainerResponseFilter?