我正在创建一个功能,用1增加文件名中的最后一个数字。
样品:
filename01.jpg => filename02.jpg
file01name01.jpg => file01name02.jpg
file01na01me.jpg => file01na02me.jpg
我正在努力解决原始文件名包含相同数字两次或更多次的情况。我只想增加文件名中的最后一个数字。
我做了一些研究,但未能找到正确的正则表达式。也许有人可以帮助我。
理想情况下,我希望我的代码看起来像这样:
var filename = "somefilename";
var newFilename = filename.replace(regex,lastNumber + 1);
我不确定这是否可以轻松完成。但在继续之前,我需要弄清楚正则表达式。
感谢pivmvb,这是我的最终解决方案:
function getIncreasedFileName(fileName){
var newFileName = fileName.replace(/(\D+)(\d+)(\D+)$/,
function(str, m1, m2, m3) {
var newstr = (+m2 + 1) + "";
return m1 + new Array(m2.length+1 - newstr.length).join("0") + newstr + m3;
})
return newFileName;
}
答案 0 :(得分:2)
"test01.jpg".replace(/(\D+)(\d+)(\D+)$/, function(str, m1, m2, m3) {
var newstr = (+m2 + 1) + "";
return m1 + new Array(3 - newstr.length).join("0") + newstr + m3;
// m1 === "test"
//
// m2 === "01"
// So:
// +m2 + 1 === 2
//
// (+m2 + 1) + "" === "2"
// (convert to string, call this `newstr`)
//
// new Array(3 - newstr.length).join("0") === "0"
// (this adds an appropriate amount of leading zeroes
// so that the total length is 2)
//
// m3 === ".jpg"
});
其中:
\D+ one or more non-digits
\d+ one or more digits
\D+ one or more non-digits
$ end of string (so it only matches the last digits)
然后在执行以下操作后,通过返回新字符串的函数替换匹配的字符串:
答案 1 :(得分:1)
以下是我提出的建议:
var newFilename = filename.replace(/(\d+)(\D*$)/g ,
function(match, c1, c2) {
var nextNum = (+c1 + 1);
return (nextNum < 10 ? "0" + nextNum : nextNum) + c2;
});
请注意,我使用\D*
匹配零或更多字符串的最后一个数字和结尾之间的非数字,因此将“filename.01”更改为“filename .02“和”name01“到”name02“。如果您只想匹配号码后面有其他字符的位置,只需将*
更改为+
即可匹配一个或更多的非数字。
答案 2 :(得分:0)
您可以先找到最后的数字,然后增加它们,然后进行替换:
m = filename.match(/([0-9][0-9])([^0-9]*)$/);
incr = parseInt(m[1]) +1;
newFilename = filename.replace(/([0-9][0-9])([^0-9]*)$/, incr + "$2");
如果数字低于零,则不会添加填充0。我会告诉你的。