You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式匹配指定单级路径并排除多级子路径及末尾斜杠

嘿,我来帮你搞定这两个正则表达式的问题!

问题1:匹配某个字符后的任意内容,排除末尾带斜杠的情况

要实现这个需求,核心是确保匹配的内容不以斜杠结尾,同时覆盖目标字符后的所有合法内容。这里给你两种通用方案:

方案1:用结尾字符限定

假设你要匹配{目标字符}后的内容,正则可以写成:

{目标字符}(.*[^/])$
  • .*:匹配目标字符后任意长度的内容(包括空,但结合[^/]就不能为空)
  • [^/]:确保最后一个字符不是斜杠
  • $:锚定到字符串结尾,避免匹配中间部分

如果需要允许目标字符后面没有内容(只要整体不以斜杠结尾),可以调整为:

{目标字符}(?:[^/].*)?$
  • (?:...):非捕获组,用来分组逻辑
  • [^/].*:要么有至少一个非斜杠字符,要么没有内容(?表示可选)

方案2:用负向后行断言

如果你更倾向于用断言语法,可以用负向后行断言来排除结尾的斜杠:

{目标字符}(.*)(?<!/)$
  • (?<!/):断言字符串结尾前的字符不是斜杠
  • 同样通过$锚定结尾,确保整个字符串符合要求

问题2:精确匹配/agency/:something格式,排除更深层级路径

你原来的正则\/agency\/.*之所以会匹配/agency/foo/bar,是因为.*会匹配包括斜杠在内的任意字符,导致它能覆盖更深的路径层级。要解决这个问题,我们需要限制/agency/后面的内容不能包含斜杠,并且锚定到字符串结尾。

修改后的正则方案

把你的白名单数组修改为:

const whitelist = [ '\/agency\/[^/]+$', '\/agenzia\/[^/]+$' ];
const re = new RegExp(whitelist.join("|"));

我们逐个拆解修改点:

  • [^/]+:匹配一个或多个非斜杠字符,这样就不会允许/agency/后面出现第二个斜杠
  • $:锚定到字符串结尾,确保整个路径到/agency/xxx就结束,不会有后续的/yyy

测试验证

用你给出的测试用例验证:

console.log(re.test("/agency")); // FALSE(符合预期,因为没有`/agency/`后的内容)
console.log(re.test("/agency/foo")); // TRUE(符合`/agency/`+非斜杠内容的格式)
console.log(re.test("/agency/foo/bar")); // FALSE(符合预期,因为`/agency/`后出现了第二个斜杠)

可选调整:允许/agency本身匹配

如果你希望/agency也返回true,可以把正则调整为:

const whitelist = [ '\/agency(?:\/[^/]+)?$', '\/agenzia(?:\/[^/]+)?$' ];
  • (?:\/[^/]+)?:表示/xxx部分是可选的,这样/agency和/agency/foo都会匹配,但/agency/foo/bar依然会被排除。

内容的提问来源于stack exchange,提问作者DomingoSL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:28:13