2011-06-07 19 views
2

问题陈述是这样的:我有一个合同。在每月更新时,合同名称应附加更新标识符。例如在开始名称为myContract然后在第一更新的名称应该是myContract-R1,下一个更新的名称应该是myContract-R2等..在每个更新,名称应自动改变。所以在JQuery中,我该如何做到这一点?如何在JavaScript中实现字符串操作

+0

您可以使用字符串连接运算符'+'。 – alex 2011-06-07 06:04:00

回答

3

这是一个JavaScript问题,而不是一个jQuery问题。 jQuery对JavaScript的内置字符串操作几乎没有影响。

听起来好像你想以“myContract”或“myContract-Rx”的形式取一个字符串,并且有一个附加“-R1”的函数(如果没有“-Rx”,或者增加了数字)那里。

没有捷径,你必须这样做。这里是一个可行的草图,我希望它可以优化:

function incrementContract(name) { 
    var match = /^(.*)-R([0-9]+)$/.exec(name); 
    if (match) { 
    // Increment previous revision number 
    name = match[1] + "-R" + (parseInt(match[2], 10) + 1); 
    } 
    else { 
    // No previous revision number 
    name += "-R1"; 
    } 
    return name; 
} 

Live copy

+0

它很棒!感谢Crowder – maaz 2011-06-07 06:23:32

+1

@Hussain:不用担心,很高兴帮助。也请看@ Guffa的答案。同样的事情,但以不同(而且非常优雅)的方式表达。 – 2011-06-07 06:34:26

0

如何获取续订号码?从日期计算还是从数据库中获取?

var renewal = 1, 
    name = 'myContract', 
    newname = name+'R'+renewal; 

或也许像

$(function(){ 
function renew(contract){ 
    var num_re = /\d+/, 
     num = contract.match(num_re); 
    if (num==null) { 
     return contract+'-R1'; 
    } else { 
     return contract.replace(num_re,++num[0]); 
    } 
} 

var str = 'myContract'; 

    new_contract = renew(str); // myContract-1 
    new_contract = renew(new_contract); // myContract-2 
    new_contract = renew(new_contract); // myContract-3 

}); 

这里的jQuery帮不了你。这是纯JavaScript与字符串一起工作

P.S.我在这里有简单的reg exp,这对你的例子不是具体的(但它起作用)。从T.J.的例子中更好地使用reg-exp Crowder

2

您可以使用正则表达式是:

s = s.replace(/(-R\d+)?$/, function(m) { 
    return '-R' + (m.length === 0 ? 1 : parseInt(m.substr(2), 10) + 1); 
}); 

模式(-R\d+)?$将匹配版本号( -R\d+)如果有一个(?),并且字符串的末尾($)。

如果之前没有版本号,替换将返回-R1,否则它将解析版本号并增加它。

+0

哦,太漂亮了。但是确保在解析int时包含基数... – 2011-06-07 06:17:51

+0

@ T.J。克劳德:对......你会认为我应该学会记住,现在......:P我更新了代码。 – Guffa 2011-06-07 06:26:54