Javascript 函数将我的字符串更改为完全不同的值

Javascript 函数将我的字符串更改为完全不同的值,javascript,regex,Javascript,Regex,我需要你的帮助 我有以下功能。所发生的事情是,当它被执行时,它将我的本机文件号(x)更改为XAI-2012-402518,而它所要做的就是在末尾添加-2,然后每次都增加它 期望的结果是:XAI-2012-402517-2而不是XAI-2012-402518 通常,字符串中没有任何破折号,它工作得很好,但我认为该函数混淆了破折号 其他例子包括: filenumber -> filenumber-2 filenumber2 -> filenumber-3 XAI-2012-402517

我需要你的帮助

我有以下功能。所发生的事情是,当它被执行时,它将我的本机文件号(x)更改为XAI-2012-402518,而它所要做的就是在末尾添加-2,然后每次都增加它

期望的结果是:
XAI-2012-402517-2
而不是
XAI-2012-402518

通常,字符串中没有任何破折号,它工作得很好,但我认为该函数混淆了破折号

其他例子包括:

filenumber -> filenumber-2
filenumber2 -> filenumber-3
XAI-2012-402517 -> XAI-2012-402517-2
XAI-2012-402517-2 -> XAI-2012-402517-3
XAI-2012-402517-3 -> XAI-2012-402517-4
ect


你的功能完全正确。您有一个算法“捕获最后一个破折号后面的数字,并将其增加一”。 在“XAI-2012-402517”中,破折号后面的数字是402517,因此需要增加

为了解决这个问题,您需要对条件进行限制。例如,如果短划线后的最后一位数字小于100,您可能希望仅增加该数字:

    function test2(x){ 
            x = x.replace(/^(.+?)(-\d{0,2})?$/, function(a,b,c) { 
            return c ? b+(c-1) : a+'-2'; } );
            console.log(x)
    }
    test2("XAI-2012-402517") //XAI-2012-402517-2
    test2("XAI-2012-402517-2") //XAI-2012-402517-3

如果您的“c”必须来自第3个破折号“-”,则更改正则表达式以匹配3个破折号后的数字。鉴于您的某些文件名已经以
-\d+
结尾,您需要其他规则来区分文件版本号和文件名本身的一部分。例如,破折号是否总是不超过2个?版本永远不会超过1位吗?否则,您的需求就存在固有的模糊性。
    function test2(x){ 
            x = x.replace(/^(.+?)(-\d{0,2})?$/, function(a,b,c) { 
            return c ? b+(c-1) : a+'-2'; } );
            console.log(x)
    }
    test2("XAI-2012-402517") //XAI-2012-402517-2
    test2("XAI-2012-402517-2") //XAI-2012-402517-3