我需要从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个过滤器中,我无法真正使用它。
答案 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);