是否有更有效的方法来重现以下代码,包括从地图中检索捕获组匹配,其中包含由正则表达式对象组成的键,以及由接受匹配正则表达式的键的结果的函数组成的值?
function getFromRegexKeys(key, map) {
for (let [re, val] of map.entries()) {
if (re.test(key)) {
return val(key.match(re));
}
}
}
const map = new Map([
[/^foo\/(.+)$/, matchResults => matchResults[1]],
[/^bar\/(.+)\/(.+)\/(.+)$/, matchResults => matchResults[2]],
]);
getFromRegexKeys('foo/', map); // === undefined
getFromRegexKeys('foo/quuz', map); // === 'quuz'
getFromRegexKeys('bar/baz/qux/quz', map); // === 'qux'
答案 0 :(得分:1)
不要运行test
和 match
,这会将正则表达式应用两次。只是做
function getFromRegexKeys(key, map) {
for (const [re, val] of map.entries()) {
const res = re.exec(key); // or `key.match(re)`
if (res) return val(res);
}
}