如何检测URL是否同时包含lol和12并返回true?
检测URL是否同时包含
lol和12的正确方法 我来帮你梳理下这个问题,然后给出靠谱的解决方案~你的核心需求是判断当前路由URL同时包含lol和12这两个子串,而不是检查是否包含loltest12或loldev12这两个特定字符串对吧?你之前的代码存在两处关键问题:一是逻辑方向错了(用||表示“或”,但你需要的是“且”),二是indexOf返回的是索引而非布尔值,直接用逻辑运算符会导致判断偏差。
下面是两种可靠的实现方式:
方法一:使用indexOf做双重条件判断
这种方式直观易懂,适合简单的子串检查场景:
// 同时验证两个子串是否都存在于URL中 const hasRequiredStrings = this.router.url.indexOf('lol') !== -1 && this.router.url.indexOf('12') !== -1; // 结果会是true(同时包含)或false(缺少任意一个) console.log(hasRequiredStrings);
原理:indexOf找到子串时返回它的起始索引(非负数),找不到则返回-1,我们需要用&&确保两个子串的检查结果都不等于-1,也就是“同时满足”的逻辑。
方法二:使用正则表达式(更简洁)
如果想让代码更紧凑,可以用正则的正向预查来确保两个子串都存在(顺序不影响匹配):
// 正则规则:确保URL同时包含lol和12 const checkRegex = /(?=.*lol)(?=.*12)/; const hasRequiredStrings = checkRegex.test(this.router.url); console.log(hasRequiredStrings);
如果需要忽略大小写(比如URL里出现LOL或12的大写形式也需要匹配),可以给正则加上i标志:
const checkRegex = /(?=.*lol)(?=.*12)/i;
为什么你的原代码不符合需求?
你的代码local = this.router.url.indexOf('loltest12') || this.router.url.indexOf('loldev12');有两个明显问题:
- 逻辑错误:
||表示“或”,只要其中一个特定字符串存在就会返回对应索引,但你需要的是“同时包含lol和12”,不是“包含其中一个固定字符串”。 - 返回值处理错误:
indexOf返回的是数字,当第一个匹配项在URL开头(索引0)时,0在JS中会被视为假值,导致代码会去执行第二个indexOf,最终结果可能是索引或-1,不是你需要的布尔值true/false。
内容的提问来源于stack exchange,提问作者None
相关产品推荐
相关产品推荐

