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

如何使用正则删除字符串中最后一次出现的[uU]模式及其后内容

正则实现方案

完全可以用正则实现,甚至不需要特意用lookaround语法,利用正则自带的贪婪匹配特性就能很简单地搞定。

方案1:贪婪匹配捕获(推荐,兼容性最好)

核心逻辑:正则默认的贪婪匹配规则会自动定位到字符串中最后一个u/U的位置,我们只需要捕获这个位置之前的内容作为保留结果即可。
正则模式:

/^(.*)[uU].*$/s

替换方式:将整个匹配结果替换为第一个捕获组的内容$1即可。

  • 修饰符s的作用是让.可以匹配换行符,如果待处理字符串不含换行,可省略。
  • 逻辑说明:模式开头的.*会尽可能匹配最长的前缀,直到碰到全串最后一个u/U,后续的[uU].*$会匹配这个最后出现的u/U以及它到串尾的所有内容,捕获组1中存储的就是你需要保留的部分。

结合你给出的示例来看,上面的模式匹配后会在末尾多保留一个反斜杠,如果需要完全匹配你的示例输出(即把u/U前面紧邻的转义反斜杠也一起移除),只需要把模式调整为匹配\u/\U整体即可:

/^(.*)\\[uU].*$/s

用这个模式处理你给出的输入ab00cd\u00FF\U00FF0000,刚好能得到输出ab00cd\u00FF。

方案2:负向先行断言(lookaround实现)

如果你确实想用环视语法实现,可以通过负向先行断言直接定位最后一个u/U,匹配从该位置到串尾的内容后替换为空,不需要额外捕获前缀:

/[uU](?!.*[uU]).*$/s

逻辑说明:

  • [uU]匹配小写u或大写U
  • (?!.*[uU])是负向先行断言,要求当前匹配到的u/U后面不存在其他u/U,也就是保证匹配的是全串最后一个符合要求的字符
  • .*$匹配从这个u/U开始到串尾的所有内容

直接把匹配到的内容替换为空字符串,就能得到保留的前缀。同样,如果需要连前面的转义反斜杠一起移除,调整模式为:

/\\[uU](?!.*[uU]).*$/s

替换为空即可和示例输出完全一致。

补充说明:你目前用的lastIndexOf+substring的实现,性能比正则方案更好,处理超长字符串时优先选原有方案即可;正则方案的优势是写法紧凑,可以直接嵌入替换逻辑中使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 09:03:34