Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Regex替换文件名中的最后一个数字_Javascript_Regex - Fatal编程技术网

Javascript Regex替换文件名中的最后一个数字

Javascript Regex替换文件名中的最后一个数字,javascript,regex,Javascript,Regex,我正在创建将文件名中的最后一个数字增加为1的功能 样本: filename01.jpg => filename02.jpg file01name01.jpg => file01name02.jpg file01na01me.jpg => file01na02me.jpg 我正在努力解决原始文件名包含相同数字两次或更多次的情况。我只想增加文件名中的最后一个数字 我做了一些研究,但没有找到一个正确的正则表达式。也许有人能帮我 理想情况下,我希望我的代码如下所示:

我正在创建将文件名中的最后一个数字增加为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;
}
其中:

\D+一个或多个非数字
\d+一个或多个数字
\D+一个或多个非数字
$end字符串(因此它只匹配最后的数字)
然后,在执行以下操作后,使用返回新字符串的函数替换匹配的字符串:

  • 在数字上加1
  • 添加前导零

  • 以下是我的想法:

    var newFilename = filename.replace(/(\d+)(\D*$)/g ,
                          function(match, c1, c2) {
                            var nextNum = (+c1 + 1);
                            return (nextNum < 10 ? "0" + nextNum : nextNum) + c2;
                          });
    
    var newFilename=filename.replace(/(\d+)(\d*$)/g,
    功能(匹配,c1,c2){
    var nextNum=(+c1+1);
    返回(nextNum<10?“0”+nextNum:nextNum)+c2;
    });
    

    请注意,我使用了
    \D*
    来匹配最后一个数字和字符串结尾之间的零个或多个非数字,因此将“filename.01”更改为“filename.02”,而“name01”更改为“name02”。如果您只想匹配数字后面有其他字符的地方,只需将
    *
    更改为
    +
    ,以匹配末尾的一个或多个非数字。

    您可以首先找到最后的数字,增加它们,然后执行替换操作:

    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。我会告诉你的。

    如果现有文件名是
    filename99.jpg
    ?filename.match(/(\d+[^\d]+$/)[1],是否要用前导零号格式将两位数打断?
    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");