如何编写正则表达式来匹配我的字符串

时间:2013-09-20 16:31:01

标签: javascript regex

如何编写符合

的JavaScript RegExp
'/api/users'
'/api/users/'
'/api/users?age=22'
'/api/users/?age=22'

但不是

'/api/users/id'

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

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

4 个答案:

答案 0 :(得分:0)

这样的模式应该有效:

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

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

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

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

当然,当你将它构建为正则表达式文字时,你需要转义正斜杠:

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

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

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

答案 1 :(得分:0)

如果我理解正确,只有当它以age参数开头时才想匹配查询字符串:

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

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

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

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

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

/id之后/api/users使用负面预测:

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

使用您的示例查看此live demo