繁体   English   中英

需要 JavaScript 中的正则表达式来匹配 '/' 或 '/login'

[英]Need a Regex in JavaScript to match '/' or '/login'

我需要一个正则表达式来匹配 url 末尾的“/”或“/login”。 这是我正在尝试的正则表达式。

/\\/(login)?$/.test(window.location.href)

这就是预期的结果。

/\/(login)?$/.test('/')             //true
/\/(login)?$/.test('/login')        //true
/\/(login)?$/.test('//')            // false
/\/(login)?$/.test('/login/login')  //false

基本上我想完全匹配一组而不是多个。

这似乎是你正在测试window.location.href当你真正想要的是window.location.pathname 然后你只需要在 RegExp 的两端都有锚点:

/^\/(login)?$/.test(window.location.pathname)

你可以尝试使用window.location.href像这样:

/^https?:\/\/[^\/]*\/(login)?$/.test(window.location.href)

问题是它非常脆弱,它只需要像hash部分这样的东西来破坏它。 让浏览器为您解析 URL 安全得多。

需要检查前面的重复通常意味着使用lookbehind,这里是否定的,这在javascript中不可用。
更简单的方法是编写一些代码:

var test = [ '/', '/login', '//', '/login/login' ];

var reForFail = /(\/(?:login)?)\1$/;
var reForMatch = /\/(?:login)?$/;

console.log(test.map(e => !reForFail.test(e) && reForMatch.test(e)));

你也可以看看 Steven Levithan 的 mimim - lookbehind -javascript

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM