RegExp网址验证

时间:2019-06-11 11:56:40

标签: javascript node.js regex

为什么最后一段代码也是正确的

我想做一个路由器,所以只有在有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

2 个答案:

答案 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\/.+\/$

演示:https://regex101.com/r/RuFIkG/10/

更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test#Description

答案 1 :(得分:0)

Javascript Regex中的

\b元字符表示单词的开头或结尾。 由于您的第三个示例以/开头,因此它与\b修饰符匹配。

如果要测试字符串是否以正斜杠结尾,请改用$修饰符(如@mplungjan注释),这样它将变为:

const regexp = /\/user\/(\w+)\/?$/;