使用正则表达式键获取ES6 Map值的技巧

时间:2018-01-27 18:52:41

标签: ecmascript-6

是否有更有效的方法来重现以下代码,包括从地图中检索捕获组匹配,其中包含由正则表达式对象组成的键,以及由接受匹配正则表达式的键的结果的函数组成的值?

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'

1 个答案:

答案 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);
  }
}