如何编写正则表达式移除前缀大写段及下划线提取文件名
正则提取指定格式字符串末尾文件名实现方案
问题场景
现有字符串变量name,所有值均为下划线分隔的分段格式,需要移除开头所有由纯大写英文字母(A-Z范围)组成的前缀段及对应连接下划线,仅提取末尾的文件名部分。字符串的合法格式共两类:
- 双大写前缀格式:
XXX_XXX_filename - 单大写前缀格式:
XXX_filename
格式说明:上述
XXX指代仅由A-Z范围内大写英文字母构成的任意长度字符段。
可用正则表达式
^([A-Z]+_)+
使用时直接将字符串中匹配到该正则的内容替换为空字符串,即可得到目标文件名。
规则逻辑拆解
^:锚定字符串起始位置,确保仅匹配开头的前缀内容,不会误删文件名内部出现的大写字母加下划线组合[A-Z]+:匹配长度≥1的连续大写英文字母段,对应规则定义的X段_:匹配每个大写X段后跟随的连接下划线([A-Z]+_)+:将「大写X段+下划线」作为一个匹配单元,+代表匹配1次或多次,可同时覆盖单前缀、双前缀甚至更多段大写前缀的场景,兼容性更强。
效果验证示例
// 双前缀场景 const case1 = "USER_UPLOAD_annual_report_2024.pdf"; const res1 = case1.replace(/^([A-Z]+_)+/, ''); // 输出结果:annual_report_2024.pdf // 单前缀场景 const case2 = "TEMP_readme.md"; const res2 = case2.replace(/^([A-Z]+_)+/, ''); // 输出结果:readme.md // 文件名内含大写/下划线场景 const case3 = "SYS_Config_Backup_v2.zip"; const res3 = case3.replace(/^([A-Z]+_)+/, ''); // 输出结果:Config_Backup_v2.zip
内容的提问来源于stack exchange,提问作者Pawan.Java
相关产品推荐
相关产品推荐

