求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
相关产品推荐
相关产品推荐

