求匹配特定URL格式的JavaScript正则表达式
针对两类URL路径的JavaScript正则解决方案
嘿,我来帮你搞定这两个URL路径的正则匹配需求!下面是对应场景的正则表达式,以及详细的解释和测试示例:
场景1:匹配http://localhost:3000/anyword中的/anyword/
首先针对本地服务的URL,我们可以用这个基础正则:
/\/[^\/]+\/?$/
规则解释:
\/:匹配开头的斜杠(转义是因为斜杠是正则的默认分隔符)[^\/]+:匹配任意非斜杠的字符(也就是anyword部分,至少包含一个字符)\/?$:匹配可选的末尾斜杠,然后锚定到字符串结尾(如果原URL没有末尾斜杠,也能匹配出/anyword;如果要强制匹配带末尾斜杠,去掉?即可)
如果需要精准校验localhost:3000开头的URL,可以加上前缀限制:
/http:\/\/localhost:3000(\/[^\/]+\/?)$/
这里的捕获组$1就是你要提取的目标路径。
场景2:匹配https://www.somedomain/ln/anyword中的/ln/anyword/(ln为任意两个字母)
针对带双字母语言前缀的URL,正则可以这样写:
/\/[a-z]{2}\/[^\/]+\/?$/i
规则解释:
\/[a-z]{2}\/:匹配/xx/格式的双字母部分,i修饰符支持忽略大小写(如果只需要小写可以去掉)[^\/]+:匹配后续的anyword部分\/?$:同样匹配可选的末尾斜杠
如果要精准校验https://www.somedomain开头的URL,前缀可以调整为:
/https:\/\/www\.somedomain(\/[a-z]{2}\/[^\/]+\/?)$/i
捕获组$1就是目标路径/ln/anyword/(或/ln/anyword)。
合并正则(同时兼容两类场景)
如果需要一个正则同时处理两种情况,可以用分支条件实现:
/(?:http:\/\/localhost:3000(\/[^\/]+\/?)|https:\/\/www\.somedomain(\/[a-z]{2}\/[^\/]+\/?))$/i
说明:
(?:...):非捕获组,用来包裹两个独立匹配分支- 第一个分支对应本地URL,捕获组
$1是目标路径;第二个分支对应带语言前缀的URL,捕获组$2是目标路径 - 可以根据实际匹配结果判断哪个捕获组有值。
测试示例
// 场景1测试(无末尾斜杠) const url1 = 'http://localhost:3000/home'; const match1 = url1.match(/http:\/\/localhost:3000(\/[^\/]+\/?)$/); console.log(match1[1]); // 输出 "/home" // 场景2测试(带末尾斜杠) const url2 = 'https://www.somedomain/fr/contact/'; const match2 = url2.match(/\/[a-z]{2}\/[^\/]+\/?$/i); console.log(match2[0]); // 输出 "/fr/contact/" // 合并正则测试 const url3 = 'https://www.somedomain/en/about'; const match3 = url3.match(/(?:http:\/\/localhost:3000(\/[^\/]+\/?)|https:\/\/www\.somedomain(\/[a-z]{2}\/[^\/]+\/?))$/i); console.log(match3[2]); // 输出 "/en/about"
内容的提问来源于stack exchange,提问作者Blix
相关产品推荐
相关产品推荐

