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

JavaScript正则(/gm)匹配主次构建版本未变更软件的问题求解

正则解决方案

适用约束

  • JavaScript 风味正则
  • 强制开启 /gm 标识
  • 匹配规则:仅匹配升级前后主版本、次版本、构建版本完全一致,仅修订后缀变化的 [UPGRADE] 行

最终正则

/^\[UPGRADE\]\s+([\w\-.]+)\s+(?:([^\s-]+)-(\S+)|(\S*?)(\d+))\s+->\s+(?:(?:\2-(\S+))|(?:\4(\d+)))$/gm

分组说明

匹配成功后可按如下规则提取所需的5个分组内容:

  1. 软件名:固定取第1捕获组内容
  2. 升级前核心版本:如果第2捕获组有值则取第2组,否则取第4组
  3. 升级前后缀:如果第2捕获组有值则取第3组,否则取第5组
  4. 升级后核心版本:和升级前核心版本完全一致,直接复用第2/4组内容即可
  5. 升级后后缀:如果第2捕获组有值则取第6组,否则取第7组

正则逻辑解释

  • 行首锚定^匹配[UPGRADE]标记,直接过滤非升级类行
  • 第一捕获组([\w\-.]+)匹配软件名,支持常规软件名允许的字母、数字、短横线、点、下划线
  • 旧版本匹配用分支兼容两种常见版本格式:
    • 带-分隔的版本:用([^\s-]+)匹配-之前的核心版本,-之后所有非空格字符作为后缀
    • 不带-分隔的版本:用非贪婪匹配(\S*?)捕获末尾连续数字之前的核心版本,末尾连续数字作为后缀
  • 新版本部分通过反向引用\2、\4强制要求核心版本和旧版本完全一致,只有符合升级前后核心版本不变的行才会被匹配
  • 行尾锚定$确保整行匹配,避免局部匹配错误

原正则错误说明

你之前编写的正则核心问题是没有明确用-作为核心版本和后缀的分隔边界,第二组的[\d\.\:]+d?f?s?g?是按顺序可选匹配单个d/f/s/g字符,无法完整匹配dfsg字符串,模糊的字符集匹配导致边界判断错误,把属于后缀的字符错误匹配到核心版本分组中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:33:00