Javascript 传递变量时匹配正则表达式
我正在尝试测试Javascript 传递变量时匹配正则表达式,javascript,regex,Javascript,Regex,我正在尝试测试位置.pathname。我用正则表达式传递一个函数的路径。路径可以是: /dashboard /dashboard/orders 和位置。路径名可以是: /dashboard /dashboard/orders /dashboard/orders/5ea5c95684c28d4b7ff688e1 /dashboard/orders/anyOtherId 我要做的是将/dashboard/orders/5ea5c95684c28d4b7ff688e1作为位置传递。pathname
位置.pathname
。我用正则表达式传递一个函数的路径。路径可以是:
/dashboard
/dashboard/orders
和位置。路径名可以是:
/dashboard
/dashboard/orders
/dashboard/orders/5ea5c95684c28d4b7ff688e1
/dashboard/orders/anyOtherId
我要做的是将/dashboard/orders/5ea5c95684c28d4b7ff688e1
作为位置传递。pathname
仅与路径匹配,而与/dashboard/orders
不匹配
在中测试Regex可以让它工作:\/dashboard\/*
,然后我尝试在javascript中实现它:
const matcher = new RegExp(`${path}\/*`)
matcher.test(location.pathname)
但是,当我传递一个路径=/dashboard/orders
和位置。路径名=/dashboard/orders/5ea5c95684c28d4b7ff688e1
时,它与/dashboard
和/dashboard/orders
匹配。我需要它只与/dashboard/orders
匹配<代码>/dashboard
必须仅在路径
为/dashboard
和位置时匹配。路径名=/dashboard
我怎样才能做到这一点
提前谢谢
编辑:为了更清楚,我需要在路径
为/dashboard/orders
和位置时返回true。路径名
为/dashboard/orders
或/dashboard/orders/5ea5c95684c28d4b7ff688e1
但是,当路径为/dashboard
和位置时,必须返回false。路径名为/dashboard/orders
或/dashboard/orders/5ea5c95684c28d4b7ff688e1在这里,您可以使用两个不同的正则表达式。
一个正则表达式-
"\/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/
您可以在位置上执行。替换。pathname
以删除第二路径组件之后的所有内容,只需与路径
变量进行比较即可
此解决方案适用于您:
path == location.pathname.replace(/^(\/dashboard\/[\w-]+)\/.*$/, '$1')
surley您的模式应该是\/dashboard\/orders\/*
?为什么首先需要正则表达式?我真的不知道用例到底是什么。我会在每个斜线处拆分路径名,并使用string.startsWith(substring[,position])使用arrayOr测试
ref:@anubhava这在位置时有效。路径名是/dashboard/orders/5ea5c95684c28d4b7ff688e1
,但当它只是/dashboard/orders
时,它与路径匹配/dashboard
就像一个魔咒@anubhava。请用这个答案回答问题,这样我就可以标记为答案。谢谢