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

正则表达式解析字符串队伍名:匹配指定结束子串的问题

修正后的正则表达式
/^.*?([0-9A-Z .]+) vs ([0-9A-Z .]+)(?:\s*[ -:]*tune\s+in)?$/i
正则逐段解析
  • ^:锚定字符串开头,确保从内容起始处开始匹配,避免截断前缀内容
  • .*?:非贪婪匹配任意字符(不含换行),用来跳过NFL Matchup:这类无关前缀,直到找到第一个队伍名称
  • ([0-9A-Z .]+):第一个捕获组,匹配队伍名,允许数字、大写字母、空格和点号,+保证至少匹配一个字符(避免空值)
  • vs:匹配分隔两队的固定标识,因为有/i修饰符,所以VS也能匹配
  • ([0-9A-Z .]+):第二个捕获组,匹配第二支队伍的名称,规则和第一个捕获组一致
  • (?:\s*[ -:]*tune\s+in)?:可选的非捕获组,专门匹配结尾的tune in相关内容:
    • ?:标记为非捕获组,不会生成额外的捕获结果
    • \s*:匹配任意数量的空白字符
    • [ -:]*:匹配任意数量的空格、减号或冒号(处理- TUNE IN这类格式)
    • tune\s+in:完整匹配tune in,\s+适配中间的空格
    • ?表示这个组是可选的,没有tune in的字符串也能正常匹配
  • $:锚定字符串结尾,确保匹配到内容的最后
  • /i:大小写不敏感修饰符,支持匹配VS、TUNE IN这类大写格式
示例匹配验证

用你的测试字符串验证,捕获结果如下:

  • Eagles vs Bears:捕获组1=Eagles,捕获组2=Bears
  • NFL Matchup: Philadelphia Eagles VS Chicago Bears TUNE IN:捕获组1=Philadelphia Eagles,捕获组2=Chicago Bears
  • NFL Matchup: Philadelphia Eagles VS Chicago Bears - TUNE IN:捕获组1=Philadelphia Eagles,捕获组2=Chicago Bears
  • Philadelphia Eagles vs Chicago Bears - NFL Match:捕获组1=Philadelphia Eagles,捕获组2=Chicago Bears(结尾的- NFL Match不影响队伍名称捕获)
  • Phil.Eagles vs Chic.Bears:捕获组1=Phil.Eagles,捕获组2=Chic.Bears
  • 3agles vs B3ars:捕获组1=3agles,捕获组2=B3ars
原正则的问题

你之前的正则([0-9A-Z .]*) vs ([0-9A-Z .]*)(?:[ -:]*tune)?/i有两个关键问题:

  1. 第二个捕获组用*贪婪匹配,会把tune也纳入匹配(因为tune的字母在字符集范围内),导致队伍名称错误包含tune
  2. 没有锚定字符串的首尾,可能出现中间匹配的情况,同时没处理tune后面的in,无法完整匹配TUNE IN结尾

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:39:27