正则表达式匹配从URL

时间:2015-12-17 06:48:14

标签: javascript regex

在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' ]

有没有人有任何改进我的正则表达式的建议?

1 个答案:

答案 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"]