我想在文件名中添加一个哈希字符串,所以我试图重命名该字符串。
这就是我所拥有的:
var x = "puh.jpg";
var y = x.split(".");
y.splice(1,0,"foo");
var z = y.join(".");
console.log(z)
正确返回:puh.foo.jpg
.
问题:
这可以在一行中完成而无需声明辅助变量吗?
谢谢!
我想在文件名中添加一个哈希字符串,所以我试图重命名该字符串。
这就是我所拥有的:
var x = "puh.jpg";
var y = x.split(".");
y.splice(1,0,"foo");
var z = y.join(".");
console.log(z)
正确返回:puh.foo.jpg
.
问题:
这可以在一行中完成而无需声明辅助变量吗?
谢谢!
您可以很容易地使用正则表达式来做到这一点(以您需要使用的名称的复杂性为模):
var y = x.replace(/^([^.]*)\.(.*)$/, '$1.foo.$2');
在正则表达式中,我曾经( )
创建组(其中 2 个)。第一组匹配名称中除句点外的所有字符,直到将.
名称与文件扩展名分开。(如果扩展名可能根本不存在,那么它看起来就像^([^.]*)\.?(.*)$
是让“。”可选。)第二组获得名称的其余部分(扩展名)。
在替换字符串中,结构“$1”和“$2”被扩展为两个组匹配的原始字符串的部分。
使用这个。它保证在文件名的最后一个点处注入字符串。如果没有扩展名,它也可以工作。
alert(x.replace(/(\.[^\.]*)?$/, '.foo$1'))
试试看:
puh.jpg (=> puh.foo.jpg)
puh.bar.jpg (=> puh.bar.foo.jpg)
foo_bar (=> foo_bar.foo)
foo_bar. (=> foo_bar.foo.)
解释:
\.
匹配一个点[^\.]
匹配除点以外的任何字符\.[^\.]*
匹配一个点后跟零个或多个非点字符\.[^\.]*$
匹配字符串末尾的点后跟零个或多个非点字符(\.[^\.]*)$
匹配一个点后跟零个或多个非点字符,并允许点和字符被称为一个组$1
'.foo$1'
.foo
用字符本身替换匹配的字符x.replace(/\.([a-zA-Z0-9]*)$/, '.foo.$1')