0

我需要你的帮助,

我有以下功能。正在发生的事情是,当它执行时,它将我的本机文件号 (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

等等。

function test2(){ 
    var x = "XAI-2012-402517"

    x = x.replace(/^(.+?)(-\d+)?$/, function(a,b,c) { return c ? b+(c-1) : a+'-2'; } );

    alert(x)
}
4

1 回答 1

1

您的功能完全正确。您有一个算法“捕获最后一个破折号之后的数字并将其加一”。在“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
于 2013-11-04T22:01:54.727 回答