在Node.js应用程序中,我使用Express创建一个API,该API应该在路径/api/v1/...
的所有连接上运行。假设此API采用正斜杠分隔的无限参数,我将如何使用正则表达式匹配(并提取)URL的所有这些部分?
例如:
正则表达式应该选择 /api/v1/foo/bar/baz
,匹配组应该返回一个数组[ 'foo', 'bar', 'baz' ]
。
网址的部分始终用正斜杠分隔,网址的最后一部分可能后面有正斜杠(/api/v1/foo/
)。
在摆弄了我在互联网上找到的其他正则数据后,我想出了^\/api\/v1\/([^]*[\/]?)*
(这似乎不适合这个目的-_-)。
此正则表达式与我需要匹配的方式不匹配,例如,如果您测试/api/v1/foo/bar
,则正则表达式会找到匹配{{1}的 ONE 匹配组}}。由于此网址中有两部分('foo/bar'
部分除外),因此预期的输出实际为[ 'foo', 'bar' ]
。
有没有人有任何改进我的正则表达式的建议?
答案 0 :(得分:3)
不要使用正则表达式,拆分/
:
path = '/api/v1/foo/bar/baz'
path.split('/') // ["", "api", "v1", "foo", "bar", "baz"]
如果你想修剪第一个空字符串和下面可能的最后一个空字符串:
path = '/api/v1/foo/bar/baz/'
path.split('/') // ["", "api", "v1", "foo", "bar", "baz", ""]
尝试:
path = '/api/v1/foo/bar/baz/'
path.split('/').filter(part => part !== "") // ["api", "v1", "foo", "bar", "baz"]