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

JavaScript正则表达式:提取顺序可变的非team1命名捕获组名词

解决方案

兼容JavaScript环境的正则表达式如下:

const regex = /^Action by .*, (?<team1>[^.]+)\. (?:\k<team1> \d+, (?<team2>[^0-9,]+) \d+\.|(?<team2>[^0-9,]+) \d+, \k<team1> \d+\.)/;

测试两种变体时,均可通过match.groups.team2获取目标队名Rayo Vallecano。

正则详细解释
  • ^Action by .*,:匹配字符串开头的固定前缀,.*匹配任意非换行字符(此处为球员名Toni Kroos),最后匹配逗号。
  • (?<team1>[^.]+):命名捕获组team1,[^.]+匹配任意非点号的字符,精准捕获第一句中的主队名(如Real Madrid)。
  • \. :匹配第一句结尾的点号和后续空格。
  • (?:...):非捕获组,包裹第二句的两种可能格式,不生成额外捕获结果:
    • \k<team1> \d+, (?<team2>[^0-9,]+) \d+\.:匹配主队在前、目标队在后的格式(对应变体2),\k<team1>反向引用team1的内容,\d+匹配数字,(?<team2>[^0-9,]+)捕获不含数字和逗号的目标队名。
    • |:逻辑或,匹配两种格式中的任意一种。
    • (?<team2>[^0-9,]+) \d+, \k<team1> \d+\.:匹配目标队在前、主队在后的格式(对应变体1),同样通过(?<team2>捕获目标队名,\k<team1>确保后续是主队名。
原正则失效原因

你之前使用的^Action by .*\, (?<team1>.*)\. (?!\1)(?<team2>.*)( \d+\,| \d+\.)\.存在两个核心问题:

  1. (?<team1>.*)是贪婪匹配,会把第一句结尾的点号前所有内容都吃掉(包括队名后的空格),导致\1的内容不准确;
  2. (?!\1)是前瞻断言,但(?<team2>.*)会贪婪匹配第二句的全部内容,且未限定队名的范围(队名不含数字和逗号),在变体2中第二句开头是Real Madrid,与\1一致,前瞻断言不成立,直接匹配失败。

内容的提问来源于stack exchange,提问作者David Miguel Yusta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:05:33