[英]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.