2011-06-07 18 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