首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RegEx:删除(包括)最后下划线和文件扩展名之间的所有内容

RegEx:删除(包括)最后下划线和文件扩展名之间的所有内容
EN

Stack Overflow用户
提问于 2017-04-16 19:07:21
回答 4查看 472关注 0票数 3

我希望在保持文件扩展名的同时,从数组中的所有元素中删除ISO代码和前导下划线。ISO代码总是在文件扩展名之前。

源数组:

代码语言:javascript
运行
复制
var SrcFiles = [
"File_with_nr1_EN.txt",
"File_has_NR_3_ZHHK.txt",
"File_yy_nr_2_DE.pdf"
];

我想让它看起来像这样

代码语言:javascript
运行
复制
var SrcFiles = [
"File_with_nr1.txt",
"File_has_NR_3.txt",
"File_yy_nr_2.pdf"
];

我该怎么做?可能是带着大梁,但怎么做的?我找到了一个很好的正则表达式,只匹配文件结尾,但并不知道这对我有什么帮助。

代码语言:javascript
运行
复制
const re = /(?:\.([^.]+))?$/;
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-04-16 19:11:16

您可以捕获直到最后一个_的所有内容,匹配_和1+大写字母,然后捕获一个点和随后的1+字符(直到字符串末尾的点):

代码语言:javascript
运行
复制
/^(.*)_[A-Z]+(\.[^.]+)$/

并将其替换为$1$2,其中$1是组1的反向引用,$2引用组2中的值。

[A-Z]+可以增强为[A-Z]{2,} (因为国际标准化组织代码通常至少由2个字符组成),如果连字符可以出现在那里,使用_[A-Z-]{2,}

请参阅JS演示:

代码语言:javascript
运行
复制
var SrcFiles = [
"File_with_nr1_EN.txt",
"File_has_NR_3_ZHHK.txt",
"File_yy_nr_2_DE.pdf"
];

var res = SrcFiles.map(x => x.replace(/^(.*)_[A-Z]+(\.[^.]+)$/, '$1$2'));
// ES5
//var res = SrcFiles.map(function(x) {return x.replace(/^(.*)_[A-Z]+(\.[^.]+)$/, '$1$2'); });
console.log(res);

票数 1
EN

Stack Overflow用户

发布于 2017-04-16 19:20:12

寻找一个_,后面跟着任何不是_的东西([^_]),然后是:a ,后面跟着不是_的东西,后面是end (**$**).粗体中的部分应该被捕获为$1

代码语言:javascript
运行
复制
var SrcFiles = [
  "File_with_nr1_EN.txt",
  "File_has_NR_3_ZHHK.txt",
  "File_yy_nr_2_DE.pdf"
];

var re = /_[^_]+(\.[^_]+)$/;

console.log(SrcFiles.map(f => f.replace(re, "$1")));

REGEX101 DEMO

票数 3
EN

Stack Overflow用户

发布于 2017-04-16 19:19:34

Regex:

代码语言:javascript
运行
复制
("^_)*_[A-Z]+(\.[^.]+",?)

替代:

代码语言:javascript
运行
复制
$1$2

结帐https://regex101.com/r/h0gukN/2

我在ISO字符串之前加入了这个部分,其余部分在一起。希望它有帮助:P

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43440995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档