我希望在保持文件扩展名的同时,从数组中的所有元素中删除ISO代码和前导下划线。ISO代码总是在文件扩展名之前。
源数组:
var SrcFiles = [
"File_with_nr1_EN.txt",
"File_has_NR_3_ZHHK.txt",
"File_yy_nr_2_DE.pdf"
];
我想让它看起来像这样
var SrcFiles = [
"File_with_nr1.txt",
"File_has_NR_3.txt",
"File_yy_nr_2.pdf"
];
我该怎么做?可能是带着大梁,但怎么做的?我找到了一个很好的正则表达式,只匹配文件结尾,但并不知道这对我有什么帮助。
const re = /(?:\.([^.]+))?$/;
发布于 2017-04-16 11:11:16
您可以捕获直到最后一个_
的所有内容,匹配_
和1+大写字母,然后捕获一个点和随后的1+字符(直到字符串末尾的点):
/^(.*)_[A-Z]+(\.[^.]+)$/
并将其替换为$1$2
,其中$1
是组1的反向引用,$2
引用组2中的值。
[A-Z]+
可以增强为[A-Z]{2,}
(因为国际标准化组织代码通常至少由2个字符组成),如果连字符可以出现在那里,使用_[A-Z-]{2,}
。
请参阅JS演示:
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);
发布于 2017-04-16 11:20:12
寻找一个_
,后面跟着任何不是_
的东西([^_]
),然后是:a ,后面跟着不是_
的东西,后面是end (**$
**).粗体中的部分应该被捕获为$1
。
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")));
发布于 2017-04-16 11:19:34
Regex:
("^_)*_[A-Z]+(\.[^.]+",?)
替代:
$1$2
结帐https://regex101.com/r/h0gukN/2
我在ISO字符串之前加入了这个部分,其余部分在一起。希望它有帮助:P
https://stackoverflow.com/questions/43440995
复制