如何在Javascript中找到与正则表达式匹配的属性?

时间:2019-04-25 18:12:07

标签: javascript regex

我有一个具有多个属性的对象,这些属性是正则表达式,例如:

let a = {
   '/^\/a' : 'value 1',
   '/^\/b' : 'value 2',
   '/^\/d' : 'value 4',
} 

获得与特定字符串匹配的属性之一的最佳方法是什么?

例如,如果尝试获取'/a'应该返回我'value 1',而试图获取'/c'应该返回undefined

2 个答案:

答案 0 :(得分:2)

键/值对在这里并不是真正有用的,因为不能利用键:您可能需要先尝试 all 正则表达式,然后再找到匹配项(或不匹配)。因此,您不妨使用成对的数组。这还具有可以存储正则表达式对象的优点,而在该对象中则必须使用字符串表示形式。

这就是它的工作方式:

const regexes = [
   [/^\/a/, 'value 1'],
   [/^\/b/, 'value 2'],
   [/^\/d/, 'value 4'],
];

function getValue(s) {
    const i = regexes.findIndex(([regex]) => regex.test(s));
    if (i > -1) return regexes[i][1];
}

console.log(getValue("/b"));

答案 1 :(得分:1)

似乎很奇怪,但这是您可以写lookup-

的一种方法

const data =
  { "^\/a": 'value1'
  , "^\/b": 'value2'
  , "^\/d": 'value3'
  }

const lookup = (str = "", o = {}) =>
  ( Object
      .entries (o)
      .find (([ k, _ ]) => (new RegExp (k)) .test (str))
      || []
  )
  [1]

console .log
  ( lookup ('/a', data) // value1
  , lookup ('/b', data) // value2
  , lookup ('/c', data) // undefined
  )