Использование оператора switch и регулярного выражения для соответствия формату пути URL? - PullRequest
0 голосов
/ 07 октября 2019

Я пытаюсь использовать операторы switch с условиями регулярного выражения для установки переменной 'direction' в зависимости от 'url'. У меня есть следующий пример 'url':

1) a. /meat/chicken/C/1/edit
   b. /meat/chicken/c/2/edit
   c. /meat/chicken/new

2) a. /meat/beef/B/1/edit
   b. /meat/beef/b/2/edit
   c. /meat/beef/new

Тип мяса может варьироваться.

Мои условия / код регулярного выражения верны для этих URL:

    if(/[a-zA-Z]+.[a-zA-Z]+.[a-zA-Z]+.\d+.[edit]+/.test(url)){
        switch (true) {
            case /chicken/.test(url):
                direction = 'chicken/edit'
                break;
            case /beef/.test(url):
                direction = 'beef/edit';
                break;
            default:
                direction = 'edit';
                break;
        }
    } else if(/[a-zA-Z]+.[a-zA-Z]+.[new]+/.test(url)){
        switch (true) {
            case /chicken/.test(url):
                direction = 'chicken/new'
                break;
            case /beef/.test(url):
                direction = 'beef/new';
                break;
            default:
                direction = 'new';
                break;
        }
    }

Однако, это верно и для других URL-адресов, которые я не хочу, например:

/meat/beef/

Если 'url' равен '/ meat / beef /', это в настоящее время возвращает значение true, если if-утверждение "(иначе, если (/ [a-zA-Z] +. [a-zA-Z] +. [new] + /. test (url)) {", что я не хочу, чтобы оно было правдой, потому чтов нем нет слова «новый».

Я просто хочу, чтобы мои операторы if и switch-операторов совпадали и были верны для форматов 1) и 2) выше.

IЯ не очень хорошо владею регулярными выражениями и все еще изучаю операторы switch. Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 07 октября 2019

Я думаю, что это может быть проще.

const urlParts = url.split('/');
const [base, type] = urlParts;
const action = urlParts[urlParts.length - 1]; // get the last

if (base === 'meat' && (action === 'edit' || action === 'new')) {
  direction = [type, action].join('/');
}

Маршрутизация библиотек затруднительна. Я бы использовал некоторые из них, которые уже существуют, или, по крайней мере, прочитал бы их для идей. что-то вроде find-my-way будет отличным чтением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...