1

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

这就是我所拥有的:

var x = "puh.jpg";
var y = x.split(".");
y.splice(1,0,"foo");
var z = y.join(".");
console.log(z)

正确返回:puh.foo.jpg.

问题:
这可以在一行中完成而无需声明辅助变量吗?

谢谢!

4

3 回答 3

4

您可以很容易地使用正则表达式来做到这一点(以您需要使用的名称的复杂性为模):

var y = x.replace(/^([^.]*)\.(.*)$/, '$1.foo.$2');

在正则表达式中,我曾经( )创建(其中 2 个)。第一组匹配名称中句点外的所有字符,直到将.名称与文件扩展名分开。(如果扩展名可能根本不存在,那么它看起来就像^([^.]*)\.?(.*)$是让“。”可选。)第二组获得名称的其余部分(扩展名)。

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

于 2013-05-17T18:16:44.433 回答
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用字符本身替换匹配的字符

http://jsfiddle.net/HALf6/

于 2013-05-17T18:19:54.997 回答
1
x.replace(/\.([a-zA-Z0-9]*)$/, '.foo.$1')
于 2013-05-17T18:19:21.520 回答