Соответствует регулярному выражению при передаче переменной - PullRequest
1 голос
/ 29 апреля 2020

Я пытаюсь проверить location.pathname. Я передаю путь к функции с помощью регулярных выражений. Путь может быть:

/dashboard
/dashboard/orders

И location.pathname может быть:

/dashboard
/dashboard/orders
/dashboard/orders/5ea5c95684c28d4b7ff688e1
/dashboard/orders/anyOtherId

То, что я хочу сделать, при передаче /dashboard/orders/5ea5c95684c28d4b7ff688e1 как location.pathname совпадает только с path /dashboard/orders, а не с /dashboard.

Тестирование Regex в https://regexr.com/ Я мог заставить его работать: \/dashboard\/*, затем я попытался реализовать его в javascript:

const matcher = new RegExp(`${path}\/*`)
matcher.test(location.pathname)

Однако, когда я передаю path = /dashboard/orders и location.pathname = /dashboard/orders/5ea5c95684c28d4b7ff688e1, он совпадает с /dashboard и /dashboard/orders. Мне нужно, чтобы оно совпадало только с /dashboard/orders. /dashboard должно совпадать только тогда, когда path равно /dashboard и location.pathname = /dashboard.

Как мне этого добиться?

Заранее спасибо

Редактировать: Быть более ясно, мне нужно, чтобы оно возвращало значение true, когда path равно /dashboard/orders и location.pathname равно /dashboard/orders или /dashboard/orders/5ea5c95684c28d4b7ff688e1.

Но оно должно возвращать значение false, когда path равно /dashboard и location.pathname равно /dashboard/orders или /dashboard/orders/5ea5c95684c28d4b7ff688e1

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Вы можете сделать .replace на location.pathname, чтобы удалить все после компонента 2-го пути и просто сравнить с переменной path.

Это решение должно работать для вас:

path == location.pathname.replace(/^(\/dashboard\/[\w-]+)\/.*$/, '$1')

Демонстрация RegEx .replace

0 голосов
/ 29 апреля 2020

Здесь вы можете использовать два разных регулярных выражения. Одно регулярное выражение -

 "\/dashboard(\/)?$"

Это будет соответствовать "/dashboard" и "/dashboard/"

Второе регулярное выражение -

 "\/dashboard\/orders(\/[a-zA-Z0-9]*(\/)?)?$"

Это будет соответствовать

/dashboard/orders /dashboard/orders/5ea5c95684c28d4b7ff688e1 /dashboard/orders/anyOtherId /dashboard/orders/ /dashboard/orders/5ea5c95684c28d4b7ff688e1/ /dashboard/orders/anyOtherId/

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