如何用JS正则匹配URL第一个正斜杠后包含指定单词bacon
正则实现URL路径bacon检测方案
需求说明
通过正则实现URL校验逻辑:检测URL字符串里第一个/之后的路径内容中是否存在子串bacon,第一个/之前的域名等内容即使包含bacon也不做统计。
测试用例标准
应返回true的场景
console.log('1 - ', myRegexFunction('www.bacondelivery.com/weekly-bacon-delivery/')); console.log('2 - ', myRegexFunction('www.bacondelivery.com/daily-bacon-delivery/')); console.log('3 - ', myRegexFunction('www.bacondelivery.com/bacon-of-the-month-club/'));
应返回false的场景
console.log('4 - ', myRegexFunction('www.bacondelivery.com/')); console.log('5 - ', myRegexFunction('www.bacondelivery.com/?some_param')); console.log('6 - ', myRegexFunction('www.bacondelivery.com/about/')); console.log('7 - ', myRegexFunction('www.bacondelivery.com/contact-us/'));
原有代码问题
原有正则^([a-z0-9]{5,})$逻辑完全不匹配需求:
- 仅支持匹配全由小写字母、数字组成且长度不小于5位的字符串,无法识别URL里的
.、/、-等特殊字符 - 没有针对目标关键词
bacon的匹配规则,完全没覆盖路径检测逻辑
正确实现方案
正则设计思路
- 优先匹配字符串中第一个出现的
/,确保后续检测范围完全在第一个斜杠之后,自动跳过域名部分的bacon干扰 - 匹配
/后的任意内容,查找是否存在bacon子串
可直接运行的代码
function myRegexFunction(url) { // 如果需要忽略bacon的大小写匹配,可将正则改为 /\/.*bacon/i const regex = /\/.*bacon/; return regex.test(url); }
逻辑验证说明
- 所有要求返回
true的用例:第一个/后的路径段都包含bacon子串,可被正则正常命中 - 所有要求返回
false的用例:要么第一个/后无有效路径内容,要么/后的内容(含查询参数)不存在bacon子串,正则匹配失败 - 传入不带
/的纯域名字符串时,正则找不到斜杠会直接返回false,符合逻辑(不存在路径段自然不可能有路径内的bacon)
内容的提问来源于stack exchange,提问作者Marc
相关产品推荐
相关产品推荐

