如何在JavaScript中用正则表达式匹配带圆括号的文件名?
正则调整方案
原正则问题分析
你原来的正则使用非贪婪匹配(.+?)捕获括号内内容,没有限制结束边界,遇到文件名内部的右括号就会提前终止匹配,无法处理嵌套括号的场景。
调整后正则
/(File \d+) \((.*?)\)(?=, File|$)/g
规则说明
(File \d+):匹配固定前缀File加文件编号\(:匹配包裹文件名的外层左括号(.*?):非贪婪匹配文件名内容,支持包含嵌套括号\):匹配包裹文件名的外层右括号(?=, File|$):正向预查限制边界,仅当右括号后为下一个文件的分隔符, File或字符串结尾时才匹配结束,避免被内部右括号截断
测试示例
const rawText = 'File 147034 (Screenshot (23.06.2021 16:55:00).png), File 147035 (Screenshot 23.06.2021 16:55:00.png)'; const fileReg = /(File \d+) \((.*?)\)(?=, File|$)/g; const result = []; let matchItem; while ((matchItem = fileReg.exec(rawText)) !== null) { result.push({ filePrefix: matchItem[1], fullFileName: matchItem[2] }); } // 输出结果: // [ // { filePrefix: 'File 147034', fullFileName: 'Screenshot (23.06.2021 16:55:00).png' }, // { filePrefix: 'File 147035', fullFileName: 'Screenshot 23.06.2021 16:55:00.png' } // ]
内容的提问来源于stack exchange,提问作者JJD
相关产品推荐
相关产品推荐

