如何从URL过滤特定的参数?

时间:2019-04-25 13:39:07

标签: javascript

我需要从URL中过滤掉参数。 例如:

URL = test1/test2/:test3

某些过滤器输出= test3

URL = test1/:test2/test3

某些过滤器输出= test2

URL = :test1/test2/test3 

某些过滤器输出= test1

URL = :test1/test2/test3/:test4 

某些过滤器输出= test1, test4

我自己尝试了一些REGEX和子字符串过滤器,但考虑到上面所有可能的URL示例都在1个过滤器中,我无法真正使用它。

3 个答案:

答案 0 :(得分:1)

是这样吗?:

https://regex101.com/r/Jh0BVJ/3/

regex = new RegExp(/:(?<match>(?:[\w\-.~:?#\[\]@!$&'()*+,;=%]*)\d+)+/gm)
url = ":test1/test2/test3/:test4"
console.log(url.match(regex))

答案 1 :(得分:0)

您实际上只是在创建另一个路由器:

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);

答案 2 :(得分:0)

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);