1

如何编写一个 JavaScriptRegExp来匹配

'/api/users'
'/api/users/'
'/api/users?age=22'
'/api/users/?age=22'

但不是

'/api/users/id'

Regex到目前为止我已经尝试过:

new RegExp('^' + '/api/users' + '\/?\\S*' + '$') 
4

4 回答 4

0

要完全匹配这些字符串并用作条件,您可以使用 .test(subjectString):

(/^\/api\/users\/?(\?age=\d+)?$/).test(subjectString)
于 2013-09-20T17:28:04.687 回答
0

/id对after使用负面展望/api/users

/^\/api\/users(?!\/id).*$/

查看与您的示例一起使用的现场演示。

于 2013-09-21T01:02:07.613 回答
0

如果我理解正确,您只想匹配以 age 参数开头的查询字符串:

/\api\/users\/?(\?age=\d+|$)/

\api\/users\/?将匹配 /api/users 或 api/users/

(\?age=\d+|$)将匹配 ?age=22 或字符串结尾 ($)

[编辑]根据您的评论,一个更简单的表达式:

/\api\/users\/?(\?|$)/

(\?|$)将匹配查询字符串的开头 (?) 或字符串的结尾 ($)

于 2013-09-20T16:47:31.583 回答
0

像这样的模式应该有效:

^/api/users/?(\?age=22)?$

或者假设您想要匹配的不仅仅是22年龄参数的文字:

^/api/users/?(\?age=\d+)?$

这将匹配一个文字/api/users,后跟一个可选的\,然后是一个可选的?age=和一个或多个数字。

当然,当您将其构造为正则表达式文字时,您需要转义正斜杠:

^/\/api\/users\/?(\?age=\d+)?/$

或者转义反斜杠并使用RegExp构造函数:

new RegExp("^/api/users/?(\\?age=\\d+)?$")
于 2013-09-20T16:36:42.110 回答