Как найти свойство, которое соответствует регулярному выражению в Javascript? - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть объект с несколькими атрибутами, которые являются регулярными выражениями, такими как:

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

Каков наилучший способ получить одно из свойств, которое соответствует определенной строке?

Например, если попытка получить '/a' должна вернуть мне 'value 1', а попытка получить '/c' должна вернуть undefined.

Ответы [ 2 ]

2 голосов
/ 25 апреля 2019

пары ключ / значение здесь не очень полезны, потому что ключ не может быть использован: вам может понадобиться попробовать все регулярные выражения, прежде чем найти совпадение (или нет). Таким образом, вы могли бы также использовать массив пар. Это также имеет то преимущество, что вы можете хранить объекты регулярных выражений, тогда как в объекте вам приходилось использовать строковые представления.

Так вот как это будет работать:

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 голос
/ 25 апреля 2019

Кажется странным, но вот один способ, которым вы могли бы написать 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
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...