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

Javascript正则提取ABC乐谱指定演奏版本的实现方案咨询

解决方案

核心问题原因

你之前的正则使用了贪婪匹配规则,[\s\S]*会尽可能匹配最长的符合条件的字符串,所以多版本场景下会直接匹配到最后一个X:前的所有内容,导致结果错误。

正确正则规则

提取第1个版本(兼容所有场景)

^X:(?:(?!\nX:)[\s\S])*

提取任意第N个版本(N从1开始计数,把规则里的{N-1}替换为对应数字即可,比如提取第3个版本就写{2})

(?:.*?\n(?=X:)){N-1}(^X:(?:(?!\nX:)[\s\S])*)

规则说明

  • 匹配时需开启多行匹配模式(正则后缀加m),确保^可以匹配每一行的行首,避免误匹配到乐谱内容中的X:字符串
  • 采用负向预查逻辑,匹配到下一个版本起始标记\nX:或文件末尾就自动停止,不会错误吞入后续版本内容
  • 兼容所有你提供的测试场景:非连续版本编号、同编号多版本、含特殊字符、单版本场景都可正确匹配

代码示例(JavaScript环境)

// 待解析的ABC文件全文
const abcFullText = `这里替换为你的ABC文件内容`;
// 提取第2个版本示例:N=2,所以N-1=1,填在{1}的位置
const reg = /(?:.*?\n(?=X:)){1}(^X:(?:(?!\nX:)[\s\S])*)/m;
const result = abcFullText.match(reg);
const targetVersionContent = result ? result[1] : "未查询到对应版本";

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:48:03