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

求ECMAScript(JavaScript)正则:提取.PDF及前面到空格-空格的内容

提取CSV中PDF文件名的ECMAScript正则表达式方案

需求明确

从大型CSV文件的每行内容里,提取包含.PDF扩展名的目标段:即从.PDF往前追溯,直到第一个出现的-(空格+减号+空格)为止的完整内容(对应示例中的CMSA123456789012345.PDF、CMSA-12345678-9012345.PDF等)。

正则表达式及解释

直接用这个适配ECMAScript的正则:

/(?<= - ).*?\.PDF(?= - )/g

各部分作用:

  • (?<= - ):正向后顾预查,确保匹配内容的前面是-分隔符,但不会把分隔符包含到结果里
  • .*?:非贪婪匹配任意字符(除换行),避免误匹配多个分隔符之间的无关内容
  • \.PDF:匹配字面量.PDF(点号需要转义,否则会匹配任意字符)
  • (?= - ):正向前瞻预查,确保匹配内容的后面是-分隔符,精准锁定PDF文件名段
  • g:全局匹配标志,适配可能存在多个目标的场景(单CSV行一般只有一个)

JavaScript使用示例

基础用法(ES2018+环境)

// 示例CSV行
const csvLine = ",CT - Cash Thang (Version 2019) - IBM SERVICES - CMSA+12345678-9 012345.PDF - Active - 12/20/2018 5:29:58 PM";
// 正则表达式
const pdfRegex = /(?<= - ).*?\.PDF(?= - )/g;
// 提取结果
const target = csvLine.match(pdfRegex);
console.log(target); // 输出: ["CMSA+12345678-9 012345.PDF"]

兼容旧环境方案(无后顾预查支持)

如果运行环境不支持ES2018的后顾预查,改用捕获组:

const csvLine = ",CT - Cash Thang (Version 2019) - IBM SERVICES - C A 123456789012345.PDF - Active - 12/20/2018 5:29:58 PM";
const pdfRegex = / - (.*?\.PDF) - /;
const matchResult = pdfRegex.exec(csvLine);
if (matchResult) {
  console.log(matchResult[1]); // 输出: "C A 123456789012345.PDF"
}

额外适配

如果CSV中存在小写.pdf扩展名,添加忽略大小写标志i:

/(?<= - ).*?\.PDF(?= - )/gi

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:31:21