自定义通配符匹配
不得不说我的算法还是太太太薄弱了。js中数组的includes可以判断数组中是否含有给定的值,而这里我需要一个类似的方法但是数组中是可以含有通配符的。 这里以 * 星号为通配符。路由白名单数组['/a/*', '/b', '/b/c'],想要匹配a及a下的所有子路由及'/b'和'/b/c'这两个路由。匹配到true,否则false
捣鼓了一个多小时才得到了这么一个函数可以实现此功能
js
// 自定义通配符匹配,匹配到为true否则为false
function regexpGlobbing(arr, symbol,str) {
return !!arr.reduce((total, e) => {
// 将定义的通配符则替换为 ./ 来控制通配
const r = new RegExp(`^${ e.replace(symbol, '.*') }$`)
return r.test(str) ? total + 1 : total + 0
}, 0)
}起初走了弯路,没有使用new RegExp()与replace来动态替换,导致花费的时间比较长