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

求符合指定规则的regex,实现type/tag开头行文本的精准分组捕获

正则解决方案

你原来的正则核心问题是没有对数字捕获组后的字符做严格限制,也没有把?和后续分组做绑定,导致非法格式被错误拆分匹配。

可用正则表达式

/^(type|tag):([^\\]*)?\\(\d{1,3})(?:\?([^:]*)?(?::([^:]*)?)?)?$/i

注:如果是在需要转义反斜杠的编程语言(如JavaScript、Java)中使用,需要把正则内的单个反斜杠替换为两个反斜杠,即:/^(type|tag):([^\\\\]*)?\\\\(\\d{1,3})(?:\\?([^:]*)?(?::([^:]*)?)?)?$/i

正则逻辑说明

  • ^ 匹配行首,保证内容从行首开始符合规则
  • (type|tag) 捕获组1,匹配开头的type或tag
  • : 匹配固定的冒号分隔符
  • ([^\\]*)? 捕获组2,匹配冒号后到反斜杠前的所有可选内容,无内容时返回空
  • \\ 匹配规则要求必须存在的反斜杠
  • (\d{1,3}) 捕获组3,严格匹配1-3位纯数字,为必填项
  • (?:\?([^:]*)?(?::([^:]*)?)?)? 整段为可选非捕获组,只有出现?时才会匹配后续内容:
    • \? 匹配必须存在的问号
    • ([^:]*)? 捕获组4,匹配问号后到下一个冒号前的可选内容
    • (?::([^:]*)?)? 嵌套可选非捕获组,匹配冒号加后续的捕获组5可选内容
  • $ 匹配行尾,保证没有多余的非法字符

测试验证

  • 合法输入type:test\1?value12:value9:捕获结果符合预期,Group1=type、Group2=test、Group3=1、Group4=value12、Group5=value9
  • 合法输入type:\22?value62:value3:捕获结果符合预期,Group1=type、Group2=空、Group3=22、Group4=value62、Group5=value3
  • 非法输入type:\1p?hello:iii:数字后出现非?的字符p,整段匹配失败,符合拦截要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:27:01