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

正则表达式问题:如何保留指定匹配项并删除其余内容?

正则表达式问题分析与正确实现

你写的正则为什么不对

你之前的正则/[^(\bhttps:\/\/\b)]|[^(\b\.ingest.sentry.io\/\b)]/g存在几个核心错误:

  • 字符集用法错误:[^...]是「单个字符取反匹配」,只能针对单个字符,没法匹配https://这种多字符的完整片段。你试图用它保留整个子串,逻辑完全不成立。
  • 单词边界\b误用:\b是单词边界(匹配单词字符和非单词字符的分界),https://里的://都是非单词字符,\bhttps:\/\/\b的边界位置根本不符合你要匹配的子串位置,而且放在字符集里完全没有意义。
  • 逻辑错误:两个取反字符集用|连接,意味着匹配「不在第一个集合的字符」或者「不在第二个集合的字符」——几乎所有字符都会被匹配到,最终只会把所有内容删掉,完全达不到保留目标子串的效果。

正确实现方案

要保留https://和.ingest.sentry.io/,可以用两种思路:

思路1:捕获目标子串并替换

用正则捕获需要保留的两个部分,把整个字符串替换成这两个捕获组的拼接:

  • 正则表达式:^(https:\/\/).*?(\.ingest\.sentry\.io\/).*$
  • 替换为:$1$2

解释:

  • ^匹配字符串开头,(https:\/\/)捕获第一个要保留的片段
  • .*?非贪婪匹配中间所有内容(直到遇到后面的目标子串)
  • (\.ingest\.sentry\.io\/)捕获第二个要保留的片段
  • .*$匹配剩余所有内容
  • 替换时只保留两个捕获组的内容,就得到https://.ingest.sentry.io/

思路2:删除不需要的部分

直接匹配并删除https://之后到.ingest.sentry.io/之前的内容,以及.ingest.sentry.io/之后的所有内容:

  • 正则表达式:/(?<=https:\/\/).*?(?=\.ingest\.sentry\.io\/)|(?<=\.ingest\.sentry\.io\/).*/g
  • 替换为空字符串即可

解释:

  • (?<=https:\/\/)是正向预查,确保前面是https://
  • .*?(?=\.ingest\.sentry\.io\/)非贪婪匹配到.ingest.sentry.io/之前的内容,删除这部分
  • (?<=\.ingest\.sentry\.io\/).*匹配.ingest.sentry.io/之后的所有内容,删除这部分

内容的提问来源于stack exchange,提问作者Micheal J. Roberts

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:02:50