如何在JavaScript文件名和文件扩展名之间的一行中添加一个随机字符串?

如何在JavaScript文件名和文件扩展名之间的一行中添加一个随机字符串?,javascript,join,split,splice,Javascript,Join,Split,Splice,我想在文件名中添加一个hashstring,所以我试图重命名该字符串 这就是我所拥有的: 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(/^([^.]*)\.(.*)

我想在文件名中添加一个hashstring,所以我试图重命名该字符串

这就是我所拥有的:

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组。第一组匹配名称中的所有字符,句点除外,直到。将名称与文件扩展名分离。如果扩展可能根本不存在,那么它将看起来像^[^.]*\.?.*$来生成扩展。可选择的第二个组从扩展名中获取名称的其余部分

alert(x.replace(/(\.[^\.]*)?$/, '.foo$1'))

在替换字符串中,构造$1和$2被扩展为两组匹配的原始字符串的一部分。

使用正则表达式可以很容易地实现这一点,从而调整需要使用的名称的复杂性:

var y = x.replace(/^([^.]*)\.(.*)$/, '$1.foo.$2');
x.replace(/\.([a-zA-Z0-9]*)$/, '.foo.$1')
在正则表达式中,我曾经创建了其中的第2组。第一组匹配名称中的所有字符,句点除外,直到。将名称与文件扩展名分离。如果扩展可能根本不存在,那么它将看起来像^[^.]*\.?.*$来生成扩展。可选择的第二个组从扩展名中获取名称的其余部分

alert(x.replace(/(\.[^\.]*)?$/, '.foo$1'))

在替换字符串中,结构$1和$2被扩展为两组匹配的原始字符串的部分。

使用此结构。它保证在文件名的最后一个点注入字符串。如果没有扩展,它也可以工作

x.replace(/\.([a-zA-Z0-9]*)$/, '.foo.$1')
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,后跟字符本身
用这个。它保证在文件名的最后一个点注入字符串。如果没有扩展,它也可以工作

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,后跟字符本身
看起来不错。Foo将是一个MD5哈希,但其余的。。。将是文件名和扩展名。正在尝试。@Pointy如果可能的话,你能把它分解一下并解释一下吗?@SachinG是的,对不起,Internet和我暂时分开了:-@Pointy,当扩展名丢失时,你当前的正则表达式变体^[^.]*\.?.*$在替换为“$1.foo.$2”时将不会产生预期的结果。它将生成一个尾随点,如puh=>puh.foo。。请参阅下面我的答案,以了解在没有扩展名的情况下正常工作的正则表达式。它可以很容易地进行调整,使其看起来更像您的,您可以使用正则表达式引用文件名的扩展名前部分和扩展名后部分。当文件名中有多个点时,正则表达式也会失败。@MihaiDanila是的,显然我的示例在缺少扩展名时不起作用。最初的问题本质上意味着情况并非如此,但更普遍的解决方案是受欢迎的:-看起来不错。Foo将是一个MD5哈希,但其余的。。。将是文件名和扩展名。正在尝试。@Pointy如果可能的话,你能把它分解一下并解释一下吗?@SachinG是的,对不起,Internet和我暂时分开了:-@Pointy,当扩展名丢失时,你当前的正则表达式变体^[^.]*\.?.*$在替换为“$1.foo.$2”时将不会产生预期的结果。它将生成一个尾随点,如puh=>puh.foo。。请参阅下面我的答案,以了解在没有扩展名的情况下正常工作的正则表达式。它可以很容易地进行调整,使其看起来更像您的,您可以使用正则表达式引用文件名的扩展名前部分和扩展名后部分。当文件名中有多个点时,正则表达式也会失败。@MihaiDanila是的,显然我的示例在缺少扩展名时不起作用。最初的问题本质上意味着情况并非如此,但更普遍的解决方案是受欢迎的:-也是不错的解决方案。谢谢这也是一个很好的解决方案。谢谢