替换或删除单词、字符、数字和扩展名



我编写了一个JavaScript代码,用于替换(删除(文件名的一些单词、字符、数字和扩展名。到目前为止,我只能使用以下代码删除文件名的扩展名:

fileName = fileName.replace(/(?:.[^.]*$|$)/, ''); 

我有如下文件名:

2.5_TR125_10x10.jpg
AB1_TR3201_50x50.png

我只想保留TR部分并删除

2.5_ and _10x10.jpg
AB1_ and _50x50.png

我试图在上面的代码中包含介于((之间的这些单词,但没有成功。

任何想法如何将这些单词包括在要删除的列表中

您说要保留TR部分,所以TR子字符串在一个下划线之后,直到下一个下划线。

您可以String#match()提取它:

const strs = ['2.5_TR125_10x10.jpg','AB1_TR3201_50x50.png'];
const regex = /_(TR[^_]*)/;
for (const s of strs) {
console.log(s, '=>', s.match(regex)?.[1]);
}

这里,_(TR[^_]*)匹配_,然后将TR子字符串和除下划线以外的任何零个或多个字符捕获到组1中。

如果您计划使用单独的regexp删除字符串的部分,则效率会降低。比方说,如果您想在当前正则表达式的基础上构建String#replace(请注意,$替代项应该被删除,用空字符串替换字符串末尾位置(空字符串(是没有意义的,而(?:.[^.]*$|$)模式实际上是.[^.]*$(,那么您应该使用

const remove_patterns = [String.raw`^[^_]*_`, String.raw`_d+xd+`, String.raw`.[^.]*$`];
const regex = new RegExp(remove_patterns.join('|'), 'g');
const strs = ['2.5_TR125_10x10.jpg','AB1_TR3201_50x50.png'];
for (const s of strs) {
console.log(s, '=>', s.replace(regex, ''));
}

在这里,以下模式匹配的所有出现都将被删除:

  • ^[^_]*_-字符串的开头,除__之外的零个或多个字符
  • _d+xd+-_,一个或多个数字,x,一个或者多个数字
  • .[^.]*$-一个点,零个或多个字符,而不是一个点和字符串的末尾

最新更新