Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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中实现字符串操作_Javascript_Jquery - Fatal编程技术网

如何在JavaScript中实现字符串操作

如何在JavaScript中实现字符串操作,javascript,jquery,Javascript,Jquery,问题陈述是这样的:我有一份合同。每月续签时,合同名称应附加续签标识符。例如,开始时名称为myContract,然后在第一次续订时名称应为myContract-R1,下一次续订名称应为myContract-R2,依此类推。。每次续订时,名称应自动更改。那么在Jquery中,我该如何做呢 您如何获得续约号码?从日期开始计算,还是从数据库获取 var renewal = 1, name = 'myContract', newname = name+'R'+renewal; 或者像 $

问题陈述是这样的:我有一份合同。每月续签时,合同名称应附加续签标识符。例如,开始时名称为myContract,然后在第一次续订时名称应为myContract-R1,下一次续订名称应为myContract-R2,依此类推。。每次续订时,名称应自动更改。那么在Jquery中,我该如何做呢

您如何获得续约号码?从日期开始计算,还是从数据库获取

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处理字符串


另外,我这里有一个简单的reg exp,这对于你的例子来说并不具体(但它是有效的)。最好使用T.J.Crowder示例中的reg exp这是一个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;
}

您可以为此使用正则表达式:

s = s.replace(/(-R\d+)?$/, function(m) {
  return '-R' + (m.length === 0 ? 1 : parseInt(m.substr(2), 10) + 1);
});
如果存在修订号(
),则模式
(-R\d+)$
将与修订号(
-R\d+
)匹配,并与字符串结尾(
$
)匹配


如果以前没有修订号,替换将返回
-R1
,否则它将解析修订号并增加它。

您可以使用字符串连接运算符
+
。哦,这太漂亮了。但在解析int时一定要包括基数。@T.J.克劳德:对。。。你会认为我现在应该学会记住这一点…:P我更新了密码。@Hussain:不用担心,很高兴这有帮助。再看看@Guffa的答案。大致相同,但表达方式不同(相当优雅)。