为什么最后一段代码也是正确的
我想做一个路由器,所以只有在有2个部分时才必须是真的。第一个必须是“用户”,第二个可以是任何东西,但是当url具有3个部分时,我的代码仍然返回true
const regexp = /\/user\/(\w+)\/?\b/;
console.log(regexp.test('/user/Name'));//true
console.log(regexp.test('/user/Name/'));//true
console.log(regexp.test('/user/Name/something'));// true, but why? It's wrong
答案 0 :(得分:0)
因为如果在字符串中找到了模式,则RegExp.prototype.test()
返回true,而console.log(/\/user\/(\w+)\/?\b/.test('/user/Name/something'))
就是这种情况。
演示:https://regex101.com/r/RuFIkG/1/
如果您想匹配/user/my-name/
,则此操作/^\/user\/(\w+)\/?$/
不起作用,因为\w
的意思是[a-zA-Z0-9_]
。如果是这种情况,也许您正在寻找的正则表达式是:
^\/user\/\S+\/$
它将匹配:
/user/Name/
/user/my-name/
/user/my_name/
但不是
/user/my name/
演示:https://regex101.com/r/RuFIkG/9/
现在,当您说“秒可以是任何东西”时,您实际上意味着任何东西,包括您需要使用的空格:
^\/user\/.+\/$
答案 1 :(得分:0)
\b
元字符表示单词的开头或结尾。
由于您的第三个示例以/
开头,因此它与\b
修饰符匹配。
如果要测试字符串是否以正斜杠结尾,请改用$
修饰符(如@mplungjan注释),这样它将变为:
const regexp = /\/user\/(\w+)\/?$/;