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

需求:匹配仅含单下划线的[]/{}包裹字符串的正则表达式

精确匹配目标格式的正则表达式方案

嘿,我来帮你搞定这个正则需求!你需要的是严格匹配以[]或{}包裹、内部仅含单个下划线且前后均为非下划线字符的字符串,原正则的问题在于.+会贪婪匹配包括下划线在内的任意字符,导致无法限制下划线数量。下面是完善后的方案:

最终正则表达式

^([\[{])(?:[^_]+_[^_]+)\1$

如果觉得捕获分组的写法有点绕,也可以拆分成更直观的版本:

^\[(?:[^_]+_[^_]+)\]$|^\{(?:[^_]+_[^_]+)\}$

正则规则拆解

咱们逐个部分解释,帮你理解为什么这个正则能满足所有要求:

  • ^ 和 $:锚定字符串的开头和结尾,确保整个字符串完全符合格式,避免匹配到包含目标格式的长字符串(比如排除1Ab_23c这种无包裹符的情况)
  • ([\[{]):捕获分组,匹配开头的[或{,后续用\1引用这个分组,保证结尾的包裹符和开头完全一致(直接排除{1Ab_23c]这种包裹符不匹配的错误格式)
  • (?:[^_]+_[^_]+):非捕获分组,核心规则所在:
    • [^_]+:匹配1个或多个不含下划线的字符,对应你要求的foo部分(长度至少1)
    • _:匹配单个下划线,严格保证仅出现一次
    • 第二个[^_]+:同样匹配1个或多个不含下划线的字符,对应bar部分(长度至少1)
  • \1:引用开头捕获的包裹符,确保结尾是]或},和开头的包裹符一一对应

匹配验证

符合要求的匹配项

  • [1Ab_23c]
  • {abcDefGhjk_Z}
  • {1_abcDefGhjk}

被正确排除的不匹配项

  • {1Ab_23c](包裹符前后不一致)
  • {_1Abde_fg4567_2_}(存在多个下划线,且foo部分为空)
  • {1Abde_fg4567_2}(存在多个下划线)
  • 1Ab_23c(无包裹符)

可选扩展

如果需要限制foo和bar只能是字母数字,可以把[^_]替换为[a-zA-Z0-9],正则会变成:

^([\[{])(?:[a-zA-Z0-9]+_[a-zA-Z0-9]+)\1$

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:50:59